All Projects → gkdr → libomemo

gkdr / libomemo

Licence: MIT license
Implements OMEMO in C.

Programming Languages

c
50402 projects - #5 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to libomemo

plugins
Officially supported Psi plugins
Stars: ✭ 52 (+4%)
Mutual labels:  xmpp, omemo
Lurch4Adium
OMEMO Xtra for Adium (packaging the lurch and carbons libpurple plugins)
Stars: ✭ 38 (-24%)
Mutual labels:  xmpp, omemo
Chatsecure Ios
ChatSecure is a free and open source encrypted chat client for iOS that supports OTR and OMEMO encryption over XMPP.
Stars: ✭ 3,044 (+5988%)
Mutual labels:  xmpp, omemo
stork
(M) Android XMPP Client
Stars: ✭ 51 (+2%)
Mutual labels:  xmpp, omemo
Dino
Modern XMPP ("Jabber") Chat Client using GTK+/Vala
Stars: ✭ 1,637 (+3174%)
Mutual labels:  xmpp, omemo
xmpp
Erlang/Elixir XMPP parsing and serialization library on top of Fast XML
Stars: ✭ 111 (+122%)
Mutual labels:  xmpp
q-municate-web
Q-municate Web chat application
Stars: ✭ 66 (+32%)
Mutual labels:  xmpp
pywavethermo
Basic module to control the Worcester Wave thermostat from Python
Stars: ✭ 26 (-48%)
Mutual labels:  xmpp
django-sitemessage
Reusable application for Django introducing a message delivery framework
Stars: ✭ 51 (+2%)
Mutual labels:  xmpp
xmpp
An implementation of the Extensible Messaging and Presence Protocol (XMPP) in Go.
Stars: ✭ 97 (+94%)
Mutual labels:  xmpp
xmpp-php
PHP client library for XMPP (Jabber) protocol
Stars: ✭ 33 (-34%)
Mutual labels:  xmpp
HarmonyHub
Library for controlling a Logitech Harmony Hub
Stars: ✭ 19 (-62%)
Mutual labels:  xmpp
node-xcs
NodeJS implementation of Google's XMPP Connection Server
Stars: ✭ 37 (-26%)
Mutual labels:  xmpp
isotoxin
Isotoxin source
Stars: ✭ 69 (+38%)
Mutual labels:  xmpp
ngx-chat
Angular XMPP Client & Chat UI
Stars: ✭ 30 (-40%)
Mutual labels:  xmpp
mnm-hammer
mnm implements TMTP protocol. Let Internet sites message members directly, instead of unreliable, insecure email. Contributors welcome! (Client)
Stars: ✭ 66 (+32%)
Mutual labels:  xmpp
xmppserver-docker
Kontalk server Docker images
Stars: ✭ 28 (-44%)
Mutual labels:  xmpp
ejabberd mod gcm
Google Cloud Messaging API for Ejabberd (PUSH Messages)
Stars: ✭ 27 (-46%)
Mutual labels:  xmpp
mirage-xmpp
Implementation of XMPP for MirageOS
Stars: ✭ 12 (-76%)
Mutual labels:  xmpp
specs
Kontalk specifications and documentation
Stars: ✭ 20 (-60%)
Mutual labels:  xmpp

libomemo 0.8.1

Implements OMEMO (XEP-0384 v0.3.0) in C.

Input and output are XML strings, so it does not force you to use a certain XML lib. While the actual protocol functions do not depend on any kind of storage, it comes with a basic implementation in SQLite.

It deals with devicelists and bundles as well as encrypting the payload, but does not handle the double ratchet sessions for encrypting the key to the payload. However, you can use my axc lib for that and easily combine it with this one (or write all the libsignal client code yourself if that is better suited to your needs).

Dependencies

  • CMake (cmake)
  • pkg-config (pkg-config) or pkgconf (pkgconf)
  • Mini-XML (libmxml-dev)
  • gcrypt (libgcrypt20-dev)
  • glib (libglib2.0-dev)
  • SQLite (libsqlite3-dev)
  • GNU make (make) or Ninja (ninja-build)

Optional:

  • cmocka (libcmocka-dev) for testing (make test)
  • gcovr (gcovr) for a coverage report (make coverage)

Installation

libomemo uses CMake as a build system. It can be used with either GNU make or Ninja. For example:

mkdir build
cd build

cmake -G Ninja ..  # for options see below

ninja -v all
ninja -v test  # potentially with CTEST_OUTPUT_ON_FAILURE=1 in the environment
ninja -v install

The following configuration options are supported:

# rm -f CMakeCache.txt ; cmake -D_OMEMO_HELP=ON -LH . | grep -B1 ':.*=' | sed 's,^--$,,'
// Build shared libraries (rather than static ones)
BUILD_SHARED_LIBS:BOOL=ON

// Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ...
CMAKE_BUILD_TYPE:STRING=

// Install path prefix, prepended onto install directories.
CMAKE_INSTALL_PREFIX:PATH=/usr/local

// Install build artifacts
OMEMO_INSTALL:BOOL=ON

// Build test suite (depends on cmocka)
OMEMO_WITH_TESTS:BOOL=ON

They can be passed to CMake as -D<key>=<value>, e.g. -DBUILD_SHARED_LIBS=OFF.

Usage

Basically, there are three data types: messages, devicelists, and bundles. You can import received the received XML data to work with it, or create them empty. When done with them, they can be exported back to XML for displaying or sending.

The test cases should demonstrate the general usage.

Many errors have their own specific error code. This is only for debugging purposes and they are not intended to be stable. Some error cases which do not have their own error code print a message with more details to stderr if the environment variable LIBOMEMO_DEBUG is set to any value. Additionally, mxml also prints some errors to stderr, which can help with debugging.

If a different namespace than the one specified in the XEP is to be used, you can use specify it at compile time. See the makefile for an example.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].