[OTR-dev] libotr/pidgin-otr 4.0 beta

Rob Smits rdfsmits at cs.uwaterloo.ca
Wed May 2 18:00:12 EDT 2012


Hey,

I've just pushed a beta of libotr and pidgin-otr 4.0 into a new  
sourceforge git. This was delayed as we decided to separate the  
repositories into:
git://otr.git.sourceforge.net/gitroot/otr/libotr
git://otr.git.sourceforge.net/gitroot/otr/pidgin-otr
git://otr.git.sourceforge.net/gitroot/otr/otrproxy
git://otr.git.sourceforge.net/gitroot/otr/java-otr

The old repository (git://otr.git.sourceforge.net/gitroot/otr/otr)  
will be removed soon, and instructions on the sourceforge page will be  
updated.

Ian Goldberg and I have done a code review for libotr, but we have not  
yet looked at pidgin-otr. We'll hopefully be reviewing pidgin-otr over  
the next couple weeks. That isn't to say that libotr 4.0 does not  
currently have bugs either ;).

Also notably outstanding are libotr/UPGRADING and  
libotr/Protocol-v3.html, which will be coming soon. The translations  
for pidgin-otr also need some updates.

CHANGES:

-Instance tags (libotr, pidgin-otr, protocol)
The protocol change, and the most significant change in  
libotr/pidgin-otr is the inclusion of client instance tags. Clients  
generate instance tags that are intended to be persistent. If the same  
client is logged into the same account from multiple locations, the  
intention is that he or she will have different instance tags at each  
location. OTR wire messages (fragmented and unfragmented) include the  
source and destination instance tags after the OTR/fragment header  
portion. If a client receives a message that lists a destination  
instance tag different from his own, he will discard it (and issue a  
callback notifying the application of the event).

This avoids an issue on IM networks that always relay all messages to  
all sessions of a client who is logged in multiple times. In this  
situation, OTR clients can attempt to establish an OTR session  
indefinitely if there are interleaving messages from each of the  
sessions.

The API changes here allow you to specify a particular instance in  
otrl_message_sending, or a "meta-instance" like OTRL_INSTAG_RECENT.  
Each instance of a buddy has its own ConnContext. There is a "master  
context" for a particular buddy, which is used before you know any of  
their instances. This is also the context that gets used for OTR v2  
conversation.

In pidgin-otr, a special menu gets built for buddies who you have  
multiple OTR v3 sessions with. This allows you to select a particular  
instance, the "most secure" or most recent.

Note that instances do add some uncertainty when dealing with IM  
networks that only deliver messages to the most recently active  
session for a buddy who is logged in multiple times. If you have a  
particular instance selected, and the IM network is simply not going  
to deliver to that particular instance, there isn't too much we can  
do. Pidgin-otr will warn you when you have selected an instance that  
is not the most recent, but will not try to guess network behaviour.

-Asynchronous private key generation (libotr)

Key generation can happen in a separate thread without blocking an  
application.

-Extra symmetric key (libotr, protocol)

An extra symmetric key can be easily established when creating a data  
message. The intention here is establish a key that could be used for  
things like a file transfer, in some other channel of communication.  
There is a small protocol change here since we define a new TLV type  
for this.

-Fragmentation changes (libotr)

Functions that create new messages to be sent (e.g.,  
otrl_message_sending) can fragment and send for you, without requiring  
a separate call to otrl_message_fragment_and_send (this function is no  
longer exposed in the API).

-Callback events (libotr)

There are now callbacks for SMP events, error codes, and message  
events that simply pass an event type (instead of an English string).

-Convert ops (libotr)

There is now a callback that is made immediately before a message is  
encrypted and immediately after a message is decrypted. This callback  
can tweak the plaintext message as needed. The original use case for  
this was to allow an application to convert format tags (if this would  
normally be done on the plaintext by some other entity while the  
message is in transit).

-Logging changes (pidgin-otr)

When establishing a private conversation, pidgin-otr will also output  
whether or not pidgin is logging the conversation. The default  
behaviour will now turn off logging for otr conversations.


Please have a look, try things out and help us find bugs! Also keep an  
eye out for the code-reviewed version of pidgin-otr, and the updated  
documents.

Thanks!
Rob Smits






More information about the OTR-dev mailing list