OTR (Off-the-Record) Messaging for SIP Communicator

otr4j is part of my GSoC 09' project and is encouraged by the SIP Communicator development. otr4j is an implementation of the OTR (Off-the-Record) protocol in java.

Sunday, October 11, 2009

otr4j I/O redesign almost complete

otr4j (the java Off-the-Record library), I/O redesign is almost complete now. The plan was to create a dedicated java.net.otr4j.io package that would host various I/O streams for optimal message serialization/deserialization.

The java.net.otr4j.io package development is complete now. It has been developed independently from the existing otr4j code base because it was not possible to both develop the package and refactor it's dependencies at the same time.

As soon as I complete the refactoring and make sure everything works as expected, I will commit the code.

These code changes will fix issue 1 (Enhance serialization/deserialization) and issue 8 (non-(ISO Latin 1) characters do not display correctly), both of which are very important.


Thursday, September 17, 2009

Life After GSoC

GSoC is not that important to split the time before and after it (GSoC), but I liked that subject because it reminds of a well known song I was listening to in my earliest youth :>

So what's going on after GSoC (relevant to GSoC)?

The truth is that I don't have much free time, but I try to devote some time in otr4j and SIP Communicator. The SIP Communicator plugin is in a good state but there are some open issues for otr4j.

I have already worked on otr4j issue 3 because there was demand. Currently I'm reading Java I/O so I can work on issue 1 with more confidence.

The code changes required for closing issue 1 would affect 20-25% of the code approximately and will improve code quality and readability a lot and a bit it's efficiency.

Another thing I've started working on is a port of otr4j in .NET (otr4net), I think that will follow IO changes because I want to have a good model before I finish the port.

That's about it :)

Saturday, August 22, 2009

Debugging SIP Communicator Tests

In order to debug SIP Communicator tests we have to define a similar run configuration as the one we use to debug SIP Communicator (non-tests), only this time we need to define some more properties (as VM arguments).

These properties come from the testing.properties and accounts.properties files, that SIP Communicator does not yet have the ability to read.

-Daccounts.icq.TESTED_IMPL_ACCOUNT_ID=
-Daccounts.icq.TESTED_IMPL_PWD=
-Daccounts.icq.TESTING_IMPL_ACCOUNT_ID=
-Daccounts.icq.TESTING_IMPL_PWD=
-Daccounts.icq.CONTACT_LIST=
-Daccounts.sip.PRESERVE_PEER_INFO=false
-Daccounts.sip.account1.USER_ID=
-Daccounts.sip.account1.DISPLAY_NAME=
-Daccounts.sip.account1.PASSWORD=
-Daccounts.sip.account1.SERVER_ADDRESS=
-Daccounts.sip.account1.SERVER_PORT=
-Daccounts.sip.account1.PROXY_ADDRESS=
-Daccounts.sip.account1.PROXY_PORT=
-Daccounts.sip.account2.USER_ID=
-Daccounts.sip.account2.DISPLAY_NAME=
-Daccounts.sip.account2.PASSWORD=
-Daccounts.sip.account2.SERVER_ADDRESS=
-Daccounts.sip.account2.SERVER_PORT=
-Daccounts.sip.account2.PROXY_ADDRESS=
-Daccounts.sip.account2.PROXY_PORT=
-Daccounts.jabber.account1.USER_ID=
-Daccounts.jabber.account1.SERVER_PORT=
-Daccounts.jabber.account1.PASSWORD=
-Daccounts.jabber.account1.SERVER_ADDRESS=
-Daccounts.jabber.account2.USER_ID=
-Daccounts.jabber.account2.PASSWORD=
-Daccounts.jabber.account2.SERVER_ADDRESS=
-Daccounts.jabber.account2.SERVER_PORT=
-Daccounts.jabber.CONTACT_LIST=
-Daccounts.reporting.JABBER_REPORT_LIST=
-Daccounts.msn.account1.USER_ID=
-Daccounts.msn.account1.PASSWORD=
-Daccounts.msn.account2.USER_ID=
-Daccounts.msn.account2.PASSWORD=
-Daccounts.msn.CONTACT_LIST=
-Daccounts.reporting.MSN_REPORT_LIST=
-Daccounts.yahoo.account1.USER_ID=
-Daccounts.yahoo.account1.PASSWORD=
-Daccounts.yahoo.account2.USER_ID=
-Daccounts.yahoo.account2.PASSWORD=
-Daccounts.yahoo.CONTACT_LIST=
-Daccounts.reporting.YAHOO_REPORT_LIST=
-Daccounts.gibberish.account1.USER_ID=gibacc1
-Daccounts.gibberish.account1.PASSWORD=whatever
-Daccounts.gibberish.account2.USER_ID=gibacc2
-Daccounts.gibberish.account2.PASSWORD=whatever2
-Daccounts.gibberish.CONTACT_LIST=test-group.user1

-Dnet.java.sip.communicator.slick.runner.TEST_LIST=JabberProtocolProviderSlick
-Dnet.java.sip.communicator.CONFIGURATION_FILE_NAME=testing.sip-communicator.xml

Monday, August 17, 2009

August 17 Update

Here's a summary of the project's current status.. Screenshots of the current UI can be found in the OTR Plugin UI Picasa Web Album.

1. Make the OTR plugin register an encryption button in the tool (Implemented) and menu (Implemented) bars of the chat window.
2. The above mentioned button should indicate the status of the current chat (Implemented)
3. The above mentioned button should also contain (at least) the following options

* Start an ecnrypted chat (Implemented)
* End encrypted chat (Implemented)
* Authenticate/Verify contact (Implemented)
* Auto encrypt every session with this contact (Implemented)
* Help/ What is this (Implemented)

4. Implement support for clients that do not have OTR (Implemented)
5. Add support for incoming fragmented messages (Pending, otr4j has to be extended)
6. Configuration intertface that allows generating and displaying our own key as well as managing other people’s keys (Implemented, screenshot)
7. JUnit tests that run with every protocol (Pending)

Saturday, August 15, 2009

August 15 Update

Here's a summary of the project's current status.. Screenshots of the current UI can be found in the OTR Plugin UI Picasa Web Album.

1. Make the OTR plugin register an encryption button in the tool (Implemented, see bellow) and menu (Implemented) bars of the chat window.

Current implementation adds a button in the tool bar which is dummy for the time being. I'm not sure what this button should do. For example it could be a toggle button (start/stop encryption) or it could bring up the whole OTR menu.

UPDATE, August 16: Toggle button functionality implemented.

2. The above mentioned button should indicate the status of the current chat (Implemented)
3. The above mentioned button should also contain (at least) the following options

* Start an ecnrypted chat (Implemented)
* End encrypted chat (Implemented)
* Authenticate/Verify contact (Implemented)
* Auto encrypt every session with this contact (Implemented)
* Help/ What is this (Implemented)

4. Implement support for clients that do not have OTR (Implemented)
5. Add support for incoming fragmented messages (Pending, otr4j has to be extended)
6. Configuration intertface that allows generating and displaying our own key as well as managing other people’s keys (Pending)
7. JUnit tests that run with every protocol (Pending)

Tuesday, August 11, 2009

Midterm milestones status

Here's a summary of the project's current status

1. Make the OTR plugin register an encryption button in the tool (Pending, see bellow) and menu (Implemented) bars of the chat window

Current implementation adds a button in the tool bar which is dummy for the time being. I'm not sure what this button should do. For example it could be a toggle button (start/stop encryption) or it could bring up the whole OTR menu.

2. The above mentioned button should indicate the status of the current chat (Implemented)
3. The above mentioned button should also contain (at least) the following options

* Start an ecnrypted chat (Implemented)
* End encrypted chat (Implemented)
* Authenticate/Verify contact (Implemented)
* Auto encrypt every session with this contact (Pending. This can only be set globally in the configuration form for the time being.)
* Help/ What is this (Implemented)

4. Implement support for clients that do not have OTR (Implemented)
5. Add support for incoming fragmented messages (Pending, otr4j has to be extended)
6. Configuration intertface that allows generating and displaying our own key as well as managing other people’s keys (Pending)
7. JUnit tests that run with every protocol (Pending)

Thursday, July 23, 2009

Progress by July 23

After solving the signature generation/verification puzzles, the two last first term milestones where reached.

More specifically, message transformation operation sets where added earlier tonight for MSN, Yahoo! and ICQ (Jabber transformation set has been added some time ago). Now OtrTransformationLayer can hook into all of these protocols (MSN, Yahoo!, ICQ and Jabber) and provide encrypted communication!

My Commits to SIP Communicator

Mercurial commits to project otr4j on Google Code