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.

Wednesday, May 27, 2009

Progress by May 26

Assembling/Disassembling of all OTR messages is now supported. All operations are accompanied by the corresponding test units.

I have also started working in handling state transitions.. It starts to get exciting!!

This is the direct link to this preview release.

P.S. As I read my previous blog posts, it seems that the post length is reduced over time; I want to believe that this is because the actual code length increases..

Wednesday, May 20, 2009

Progress by May 20

The library can now disassemble all message types except tagged plain text messages. Whoever is interested in the library can download it from the project home page here: http://code.google.com/p/otr4j/ or use this direct link.

Unit testing and logging has been implemented for the so far functionality, so you can extract the library somewhere, run

ant junit
and see what happens.

Monday, May 11, 2009

First term Planning

Here I present a first plan of the first term period. Numbered items correspond to top level requirement items. Also, dates are maximum values, hopefully it won't take that long!

  • Develop a java library that handles encryption (see The current state of OTR libraries in Java)
    • Build methods to Assemble/Dissasemble OTR Messages and tests to verify things work properly
      • OTR Query Messages
      • Tagged plaintext messages
      • OTR Error Messages (May 20)
      • D-H Commit Message
      • D-H Key Message
      • Reveal Signature Message
      • Signature Message
      • Data Message (May 25)
    • Handle state transitions for the following actions (detailed description of state transitions here),build key management infrastructure (NOTE: key management for the library, not SC) and build tests to verify things work properly
      In this period functionality for Requesting an OTR conversation, Authenticated Key Exchange (AKE), and Data Exchange will be added.
      • Plaintext message without the whitespace tag
      • Plaintext message with the whitespace tag
      • Query Message
      • Error Message
      • D-H Commit Message
      • D-H Key Message (June 10)
      • Reveal Signature Message
      • Signature Message
      • Version 1 Key Exchange Message
      • Data Message
      • User requests to start an OTR conversation
      • User requests to end an OTR conversation
      • User types a message to be sent (June 25)
  • Create a transformation operation set
  • Implement support for the transformation set in all protocols
  • Implement an OTR encryption bundle prototype/proof of concept that encrypts all conversations (July 05)

Comments and critiques are very welcome :-)

The current state of OTR libraries in Java

Existing Implementations

  • jOTR is a Java framework that provides the base functionality for OTR (Off The Record) support. It is intended to be a java version of the c-based libotr, and be completely compatible with it. Sounds great but, there is no source code although the project is more than a year old.

  • Ian Goldberg, lead developer of the OTR development team, mentions an otr library for Java (java-otr) (here) that is in the workings. There is no source code or binaries, only a mentioning so I sent a follow up mail (here) with no reply, so we can't rely on this.

  • libjotr ibjotr is a Off-The-Record library in native java. It was developed for libkara but can also be used with other applications written in java. This seems to be the first and only existing implementation for OTR in Java. libjotr is working but it will be hard to use it with an other messenger than kara without modfying the API. It is also OTR v2 only. No support for Version 1. These information are confirmed by Markus, libjotr developer.

OTR4j

Having considered the above solutions, I plan to develop my own library (otr4j) for integration with SipCommunicator and any other IM, as described in my initial post.

My Commits to SIP Communicator

Mercurial commits to project otr4j on Google Code