README.md 2.38 KB
Newer Older
johan's avatar
johan committed
1 2 3 4
Lime
=======

Lime is a C++ library implementing Open Whisper System Signal protocol :
5 6 7 8
Sesame, double ratchet and X3DH. https://signal.org/docs/

Lime can run the Signal Protocol using elliptic curve 25519 or curve 448-goldilocks.

johan's avatar
johan committed
9
It is designed to work jointly with *Linphone*[1] in a multiple devices per user and multiple users per device environment.
johan's avatar
johan committed
10 11 12

Dependencies
------------
13
- *bctoolbox[2]* : portability layer, built with Elliptic Curve Cryptography
johan's avatar
johan committed
14 15 16 17 18
- *soci-sqlite3* : Db access


Build instrucitons
------------------
19 20
```
 cmake -DCMAKE_INSTALL_PREFIX=<install_prefix> -DCMAKE_PREFIX_PATH=<search_prefix> <path_to_source>
johan's avatar
johan committed
21 22 23

 make
 make install
24 25 26 27 28 29 30 31 32 33 34 35 36
```


Documentation
-------------

To generate the Doxygen documentation files(having ran the cmake command):

```
 make doc
```

Comprehensive documentation on implementation choices and built-in protocols in *lime.pdf*
johan's avatar
johan committed
37

johan's avatar
johan committed
38

johan's avatar
johan committed
39 40 41
Testing
-------
 To test on local machine, you must run a local X3DH server.
42 43 44 45
 - A nodejs/sqlite version of UNSECURE X3DH server is provided in *tester/server/nodejs*
 See README from this directory for instructions.

 - A php/mysql (on docker) version of UNSECURE X3DH server is provided in *tester/server/php*
johan's avatar
johan committed
46 47
 See README from this directory for instructions.

johan's avatar
johan committed
48 49
Library settings
----------------
johan's avatar
johan committed
50 51 52 53 54 55 56
Some mostly harmless settings are available in *src/lime_settings.hpp*

Library API
-----------
The C++11 API is available in *include/lime/lime.hpp*

if enabled (see Options), a C89 FFI is provided by *include/lime/lime_ffi.h*
johan's avatar
johan committed
57 58


johan's avatar
johan committed
59 60 61 62 63 64 65 66 67 68 69
Options
-------

- `CMAKE_INSTALL_PREFIX=<string>` : installation prefix
- `CMAKE_PREFIX_PATH=<string>`    : prefix where depedencies are installed
- `ENABLE_UNIT_TESTS=NO`          : do not compile non-regression tests
- `ENABLE_SHARED=NO`              : do not build the shared library.
- `ENABLE_STATIC=NO`              : do not build the static library.
- `ENABLE_STRICT=NO`              : do not build with strict complier flags e.g. `-Wall -Werror`
- `ENABLE_Curve25519`             : Enable support of Curve 25519.
- `ENABLE_Curve448`               : Enable support of Curve 448.
Johan Pascal's avatar
Johan Pascal committed
70
- `ENABLE_PROFILING`              : Enable code profiling for GCC
johan's avatar
johan committed
71
- `ENABLE_C_INTERFACE`            : Enable support of C89 foreign function interface
Johan Pascal's avatar
Johan Pascal committed
72

johan's avatar
johan committed
73 74
------------------

75 76
- [1] linphone-desktop: git://git.linphone.org/linphone-desktop.git
- [2] bctoolbox: git://git.linphone.org/bctoolbox.git or <http://www.linphone.org/releases/sources/bctoolbox>