An OTR-XMPP communications channel
This is a Python library for communicating with XMPP destinations using OTR (Off-the-Record Messaging) encryption.
- Your internet application can talk securely to you on your PC or smartphone using readily-available chat software with OTR support
- Send to and receive from multiple destinations, with or without fingerprint verification
- Pure python (no libotr dependency)
import time from otrxmppchannel import OTRXMPPChannel from otrxmppchannel.connection import OTR_TRUSTED, OTR_UNTRUSTED, OTR_UNENCRYPTED, OTR_UNKNOWN # Load the base64-encoded OTR DSA key. Constructing the object without # a key will generate one and provide it via ValueError exception. privkey = open('.otrprivkey', 'r').read() class MyOTRChannel(OTRXMPPChannel): def on_receive(self, message, from_jid, otr_state): if otr_state == OTR_TRUSTED: state = 'trusted' elif otr_state == OTR_UNTRUSTED: state = 'UNTRUSTED!' elif otr_state == OTR_UNENCRYPTED: state = 'UNENCRYPTED!' else: state = 'UNKNOWN OTR STATUS!' print('received %s from %s (%s)' % (message, from_jid, state)) mychan = MyOTRXMPPChannel( 'email@example.com/datadiode', 'supersecret', [ ( 'firstname.lastname@example.org', '33eb6b01c97ceba92bd6b5e3777189c43f8d6f03' ), 'email@example.com' ], privkey ) mychan.send('') # Force OTR setup time.sleep(3) # Wait a bit for OTR setup to complete mychan.send('This message should be encrypted')
- XMPP invitations are not handled
- It seems to take roughly 3 seconds to set up an OTR session. Messages sent before the session is ready may be lost.
- The private key serialization format is specific to pure-python-otr. Conversions from other formats are not handled.
If you found this software useful and would like to encourage its maintenance and further development, please consider making a donation to the Bitcoin address 1MWFhwdFVEhB3X4eVsm9WxwvAhaxQqNbJh.
This is free and unencumbered public domain software. For more information, see http://unlicense.org/ or the accompanying UNLICENSE file.