Commit Graph

  • 531d54c1d3 Removed unnecessary transaction commit. akwizgran 2011-09-07 11:18:07 +01:00
  • 0a84a01235 Allow identical batches to be sent to multiple contacts. akwizgran 2011-09-07 11:15:34 +01:00
  • e80ede4429 Map keys must be unique. akwizgran 2011-09-07 11:04:03 +01:00
  • 478a22c8db Removed javadocs from prototype repo (push them to the website instead). akwizgran 2011-09-01 11:13:06 +01:00
  • 472dff3d61 Removed redundant frame number from header. akwizgran 2011-09-01 11:11:31 +01:00
  • 928ae6288f Javadocs. akwizgran 2011-08-31 17:44:42 +01:00
  • 3b32aee6be Slightly modified ConnectionWriterImpl to write a full-size frame as soon as possible, rather than waiting for the next write. akwizgran 2011-08-19 20:10:14 +02:00
  • 0132c1eff4 Fixed a typo. akwizgran 2011-08-19 19:58:40 +02:00
  • 7e4ff343ea Added PaddedConnectionWriterTest to the ant buildfile. akwizgran 2011-08-19 19:48:48 +02:00
  • d11f7ef824 Unit tests for PaddedConnectionWriter. Also broke some shared test code out into separate classes. akwizgran 2011-08-19 19:47:24 +02:00
  • 4e2a74858b Writer and scheduler for fixed-rate connections (untested). akwizgran 2011-08-19 17:27:29 +02:00
  • 3084a6b058 Added optional padding to the frame format, so transports that are vulnerable to traffic analysis can frame their data independently of packet boundaries. akwizgran 2011-08-19 14:47:16 +02:00
  • 7a53ea7814 Unit tests for ConnectionWriterImpl. akwizgran 2011-08-19 11:50:47 +02:00
  • 156bafb8a6 Unit tests for ConnectionReaderImpl. akwizgran 2011-08-19 11:40:30 +02:00
  • a59ad23e77 Removed unused code. akwizgran 2011-08-19 11:21:59 +02:00
  • 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. akwizgran 2011-08-19 11:15:35 +02:00
  • 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). akwizgran 2011-08-19 01:46:51 +02:00
  • 4dd303d9e1 Changed maximum packet and message sizes in preparation for new transport format. akwizgran 2011-08-18 15:14:48 +02:00
  • 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. akwizgran 2011-08-14 14:46:12 +02:00
  • 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. akwizgran 2011-08-14 13:36:21 +02:00
  • 4497774311 Derive separate keys for each direction. akwizgran 2011-08-14 12:18:16 +02:00
  • 254da2da27 Removed the restriction that transport updates have to be written in delimited form. akwizgran 2011-08-14 11:41:56 +02:00
  • c2b0f0ab5a Each request packet should contain the unique ID of the offer to which it responds. akwizgran 2011-08-13 17:46:19 +02:00
  • e1b9ee247c Integration test for the protocol component. akwizgran 2011-08-13 16:56:00 +02:00
  • 8853c54930 Made the lock fairness test more precise. akwizgran 2011-08-13 16:25:45 +02:00
  • 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. akwizgran 2011-08-13 15:39:09 +02:00
  • 9d25a819d1 Decoupled ProtocolReader (which belongs in the protocol component) from PacketReader (which belongs in the transport component). akwizgran 2011-08-13 14:18:16 +02:00
  • 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. akwizgran 2011-08-12 23:24:24 +02:00
  • a8994a3354 Don't forget to check the MAC. akwizgran 2011-08-12 22:11:56 +02:00
  • 0504a2d6fd Implemented PacketReader, renamed Packet{Reader,Writer}Factory in the protocol component to Protocol{Reader,Writer}Factory. akwizgran 2011-08-12 21:55:22 +02:00
  • 4dcf9a70a1 Encrypt without allocating new buffers. akwizgran 2011-08-12 17:35:45 +02:00
  • 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. akwizgran 2011-08-12 17:14:58 +02:00
  • 68b4760dfa Use a constant for the tag size. akwizgran 2011-08-12 14:26:56 +02:00
  • f0cf825ca9 Javadoc and unit test for SharedSecret. akwizgran 2011-08-12 12:57:23 +02:00
  • e896b2d86d Unit tests for ConnectionRecogniserImpl. akwizgran 2011-08-12 12:26:47 +02:00
  • a789f49a39 Separated tag encoding from PacketWriterImpl, since it's also needed by the code that recognises tags. Implemented ConnectionRecogniser (untested). akwizgran 2011-08-11 19:55:22 +01:00
  • 7545a1cc8f Moved Bytes to the main package. Added a SharedSecret class to parse encrypted secrets retrieved from the database. akwizgran 2011-08-11 19:14:20 +01:00
  • df972e294d Support for decrypting shared secrets and deriving authentication and encryption keys from them (untested). akwizgran 2011-08-11 17:15:36 +01:00
  • 3edfa5d1ba Call the listeners when contacts are added and removed. akwizgran 2011-08-11 15:55:30 +01:00
  • 151a360587 Store shared secrets in the database (the crypto component will be responsible for wrapping/unwrapping them). akwizgran 2011-08-11 15:41:52 +01:00
  • 07b34cfbab Added a lock for the connectionWindows table and exposed getConnectionWindow() and setConnectionWindow() through the DatabaseComponent interface. akwizgran 2011-08-11 15:19:32 +01:00
  • 0e6638bad6 Retrieve the set of unseen connection numbers from a connection window. akwizgran 2011-08-11 13:58:11 +01:00
  • ac4521152f Unit tests for ConnectionWindowImpl. akwizgran 2011-08-11 13:37:18 +01:00
  • e0b86f1232 Moved ConnectionWindow into the transport module and implemented window sliding (untested). akwizgran 2011-08-11 13:22:23 +01:00
  • d5d03192e3 Basic connection window persistence. akwizgran 2011-08-11 12:56:21 +01:00
  • 3e913118f2 PacketWriterFactory. akwizgran 2011-08-09 18:23:27 +01:00
  • f3f0c223c4 PacketWriter is implemented by two classes: PacketWriterImpl and PacketEncrypter. The separation allows authentication and encryption to be tested separately. akwizgran 2011-08-09 17:50:54 +01:00
  • e9d0021f56 Added interfaces for reading and writing packets and recognising which contact originated an incoming connection, and an implementation of the PacketWriter interface. akwizgran 2011-08-09 16:15:25 +01:00
  • 18654f1514 It's not necessary to acquire all locks before closing the database, since Database.close() prevents new transactions from starting anyway. akwizgran 2011-08-05 13:39:49 +01:00
  • 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.) akwizgran 2011-08-05 13:34:58 +01:00
  • 6c5ce05c5d Promote integer types to the expected type to allow, for example, a list of mixed integer types to be read as a list of longs. akwizgran 2011-08-05 13:26:37 +01:00
  • 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. akwizgran 2011-08-04 13:41:41 +01:00
  • 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. akwizgran 2011-08-04 11:07:28 +01:00
  • 5be9d953ee Use fail() instead of assertTrue(false). akwizgran 2011-08-03 21:19:04 +01:00
  • 93ee4d004e Reduced maximum public key lengths to reasonable lengths for ECDSA. akwizgran 2011-08-03 21:08:09 +01:00
  • c6ded0227d Unit test for database exception handling. akwizgran 2011-08-03 21:01:37 +01:00
  • 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). akwizgran 2011-08-03 19:29:30 +01:00
  • 5fd87647f8 Replaced assertions with exceptions in database code, and changed exception handling so that database connections aren't closed with transactions in progress - this should make it possible to close the database cleanly if an exception occurs. akwizgran 2011-08-03 18:23:47 +01:00
  • 7752690b29 Modified ReaderImpl so it doesn't read lookahead bytes until they're needed - this will make it possible to read to the end of a packet and then pass on to the next packet without needing a PushbackInputStream. akwizgran 2011-08-03 17:12:37 +01:00
  • 7baefb3e7b Updated the transport plugin API. akwizgran 2011-08-03 16:13:13 +01:00
  • 6e7d5a06b2 API for batch-mode and stream-mode transport plugins. akwizgran 2011-08-02 15:09:24 +01:00
  • 2740b2b002 s/transport details/transport properties/g akwizgran 2011-08-02 13:08:44 +01:00
  • 0e48f4ba55 Listeners for local transport updates. akwizgran 2011-08-02 09:44:15 +01:00
  • ff0909a0e9 Listeners for subscription changes. akwizgran 2011-08-02 09:22:54 +01:00
  • 0d0885bf4b Don't throw a DbException if a contact sends duplicate batches. akwizgran 2011-08-01 17:56:18 +01:00
  • 8e8c83b83c Use the combination of batch ID and contact ID as the primary key for received and sent batches, since batches sent to or received from different contacts may contain identical lists of messages and therefore have identical IDs. akwizgran 2011-08-01 17:37:48 +01:00
  • 02c4d9197c Added CounterModeTest to ant buildfile. akwizgran 2011-08-01 14:36:19 +01:00
  • 9586e0de9c Unit tests for CTR-mode encryption. akwizgran 2011-08-01 14:01:17 +01:00
  • 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. akwizgran 2011-07-28 11:17:33 +01:00
  • 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. akwizgran 2011-07-27 20:27:43 +01:00
  • 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. akwizgran 2011-07-27 16:43:19 +01:00
  • 4311b1a224 Added RequestReaderTest to ant buildfile. akwizgran 2011-07-27 11:08:17 +01:00
  • b161e5ed1d Request reader and unit test. akwizgran 2011-07-27 11:06:54 +01:00
  • 0933092295 Added RequestWriterImplTest to ant buildfile. akwizgran 2011-07-26 22:02:51 +01:00
  • 0cf8477504 Read and write offers. Mostly boilerplate. akwizgran 2011-07-26 22:00:39 +01:00
  • 9e78837055 Implemented OfferWriter and RequestWriter, made all the writers reusable (though not thread-safe), and guiced the readers. akwizgran 2011-07-26 21:36:55 +01:00
  • 426e415676 OK, I think that's enough unit tests for one day. akwizgran 2011-07-26 18:37:58 +01:00
  • 1e60be4b75 Unit tests for DatabaseComponent. akwizgran 2011-07-26 18:25:14 +01:00
  • 8ba5b46d59 More unit tests for DatabaseComponent. akwizgran 2011-07-26 18:11:57 +01:00
  • bcf8bcbd04 More unit tests. akwizgran 2011-07-26 17:48:47 +01:00
  • bc1622b1fa Unit tests and a bugfix. THE SYSTEM WORKS! akwizgran 2011-07-26 17:24:26 +01:00
  • dc2476cb25 Unit tests. akwizgran 2011-07-26 17:12:19 +01:00
  • 1ea385e7af Unit tests and a bugfix for the new database methods. akwizgran 2011-07-26 16:46:50 +01:00
  • 10edc05dff Database portion of the offer/request/transfer protocol (untested). akwizgran 2011-07-26 15:40:34 +01:00
  • a86ef2142f Sign the message with the group's private key if the group is restricted, and check the signature if it should be present. akwizgran 2011-07-25 21:54:49 +01:00
  • 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. akwizgran 2011-07-25 21:14:16 +01:00
  • 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). akwizgran 2011-07-25 20:11:32 +01:00
  • b1f27757df Switched to 256-bit ECDSA. Modified some tests because two signatures over the same data are not necessarily identical. Key generation is fast again - should I be worried? ;-) akwizgran 2011-07-25 10:49:41 +01:00
  • 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. ;-) akwizgran 2011-07-25 10:38:46 +01:00
  • c98c968b87 Removed unnecessary Raw interface. akwizgran 2011-07-24 17:47:17 +01:00
  • 941460e3bc Readers, writers and factories for subscription and transport updates. akwizgran 2011-07-23 21:46:47 +01:00
  • 30271c14ce Reduced the visibility of some classes. akwizgran 2011-07-23 18:54:06 +01:00
  • 65be63dc0c Moved writers into their own package, replaced public static fields in CryptoModule with provider methods. akwizgran 2011-07-23 18:50:40 +01:00
  • 13f18d9e40 Found the bug, it was just a SQL syntax error. akwizgran 2011-07-23 11:29:23 +01:00
  • 0edcb31d64 Store group details in the database. Some tests are still failing... akwizgran 2011-07-23 01:29:18 +01:00
  • 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). akwizgran 2011-07-22 22:19:24 +01:00
  • 5d000b62f8 Removed Writer.close(). akwizgran 2011-07-22 18:08:05 +01:00
  • fe58fb4c30 Fixed more unit tests. akwizgran 2011-07-22 17:57:25 +01:00
  • e7f106a77f Fixed unit tests. akwizgran 2011-07-22 17:52:02 +01:00
  • 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. akwizgran 2011-07-22 17:39:59 +01:00