• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.idea/dictionaries/H02-Jun-2017-88

bnlib/H02-Jun-2017-22,93813,484

clients/H02-Jun-2017-177,20599,145

cmake/H02-Jun-2017-875766

common/H03-May-2022-2,8781,685

cryptcommon/H03-May-2022-9,0005,155

demo/H03-May-2022-1,8911,309

doc/H02-Jun-2017-2,6181,992

srtp/H02-Jun-2017-4,5242,157

zrtp/H02-Jun-2017-25,96811,823

.gitignoreH A D02-Jun-2017190 2423

AUTHORSH A D02-Jun-2017147 74

COPYINGH A D02-Jun-20177.5 KiB165128

ChangeLogH A D02-Jun-2017320 129

INSTALLH A D02-Jun-2017993 2316

NEWS.mdH A D02-Jun-201719.5 KiB576375

README.mdH A D02-Jun-20177.2 KiB160122

buildNativeAndroidTivi.shH A D02-Jun-20171.4 KiB5727

config.h.cmakeH A D02-Jun-20171.7 KiB5440

directiveH A D02-Jun-201717 21

libzrtpcpp.pc.cmakeH A D02-Jun-2017268 1410

libzrtpcpp.spec.cmakeH A D02-Jun-20173.7 KiB12497

README.md

1## GNU ZRTP C++
2
3This package provides a library that adds ZRTP support to the GNU
4ccRTP stack and serves as library for other RTP stacks (PJSIP, GStreamer).
5Phil Zimmermann developed ZRTP to allow ad-hoc, easy to
6use key negotiation to setup Secure RTP (SRTP) sessions. GNU ZRTP works
7together with GNU ccRTP (1.5.0 or later) and provides a ZRTP
8implementation that can be directly embedded into client and server
9applications.
10
11The GNU ZRTP implementation is compliant to [RFC 6189][] and adds some more
12algorithms. Currently GNU ZRTP C++ supports the following features:
13
14* multi-stream mode
15* Finite field Diffie-Hellman with 2048 and 3072 bit primes
16* Elliptic curve Diffie-Hellman with 256 and 384 bit curves (NIST curves)
17* Elliptic curves Curve25519 and Curve3617 (Dan Bernstein, Tanja Lange)
18* Skein Hash and MAC for ZRTP
19* AES-128 and AES-256 symmetric ciphers
20* Twofish-128 and Twofish-256 bit symmetric ciphers
21* The SRTP authentication methods HMAC-SHA1 with 32 bit and 80 bit length and
22  the Skein MAC with 32 bit and 64 bit length
23* The Short Authentication String (SAS) type with base 32 encoding (4
24  characters) and the SAS 256 type using words.
25
26Some features like preshared mode are not supported but the GNU
27ZRTP C++ implementation defines the necessary external interfaces and
28functions for these enhanced features.
29
30**Note:** The Elliptic curves Cure25519 and Curve3617 are available only if you
31select the crypto standalone mode during build.
32
33The newer versions (starting with 4.1) implement an extensible mechanisms to
34define algorithm selection policies that control selection of Hash, symmetric
35cipher, and the SRTP authentication. Currently two policies exist: _Standard_
36and _PreferNonNist_. The Standard policy selects algorihms based on the
37preferences (order) in the Hello packet, the PreferNonNist policy prefers
38non-NIST algorithms, for example Skein and Twofish, if the selected public key
39(Diffie-Hellman) algorithm is also one of the non-NIST algorithms. This is
40fully backward compatible and in-line with RFC6189.
41
42Refer to new [NEWS][] file for a summary of changes.
43
44[NEWS]: NEWS.md
45
46### SDES support
47This release also provides SDES support. The SDES implementation does not
48support all of the fancy stuff but is usable in most cases. This implementation
49however supports the new SDES crypto mixing to overcome some security issues
50for SIP forking. Please look for `draft-zimmermann-mmusic-sdesc-mix-00`.
51
52### Interoperability
53During the development of ZRTP and its sister implementation ZRTP4J (the Java
54version of the ZRTP) Phil Zimmermann, his developers, and I worked together to
55make sure Phil's [Zfone][] implementation and the GNU ZRTP implementations can
56work together.
57
58[zfone]: http://zfoneproject.com/index.html
59
60
61### Other implementations based on GNU ZRTP C++
62
63The ZRTP4J implementation is a copycat of the original C++ code. I used the
64same overall class structure and copied a lot of C++ functionality to Java. Of
65course some Java adaptation were done, for example to overcome the problem of
66non-existing pointers :-), thus I use some non-obvious array handling. If you
67are interessted in the Java implementation of ZRTP then you may have a look
68[here][javazrtp]. The Jitsi project uses the Java implementation. Jitsi is a
69powerful communication client and is definitely worth a [look][jitsi].
70
71To enable C based code to use ZRTP C++ I did a C wrapper that offers the same
72functionality to C based RTP implementations. The first use of the ZRTP C
73wrapper was for the [PJSIP][] library, actually the RTP part of this
74library. The ZRTP handler for PJSIP is [here][pjzrtp]. This port enables PJSIP
75based clients to use ZRTP. One of the first clients that uses this feature is
76*[CSipSimple][]*, an very good open source Android SIP client.
77
78[pjsip]: http://www.pjsip.org
79[pjzrtp]: https://github.com/wernerd/ZRTP4PJ
80[javazrtp]: https://github.com/wernerd/ZRTP4J
81[jitsi]: http://www.jitsi.org
82[csipsimple]: http://code.google.com/p/csipsimple
83
84
85### Some notes on GNU ZRTP C++ history
86The first application that demonstrated the embedded ZRTP was Minisp (now
87defunct). Minisip has it's own RTP stack and the very first version of this
88embedded ZRTP implementation worked together with this specific RTP stack.
89
90A few weeks later I implemented the GNU ccRTP glue code and ZRTP became part
91of the official GNU ccRTP project and was named GNU ZRTP C++. The Twinkle
92softphone uses GNU ccRTP and GNU ZRTP C++ since it's 0.8.2 release and Michel
93de Boer, the implementor of Twinkle, created a nice user interface. All
94following versions of Twinkle include GNU ZRTP C++ as well.
95
96
97### License and further information
98I changed the license of the ZRTP core source files from GPL to LGPL. Other
99sources files may have own license. Please refer to the copyright notices of
100the files.
101
102Thus most of this library is licensed under the GNU LGPL, version 3 or later.
103
104For further information refer to the [ZRTP FAQ][zrtpfaq] and the
105[GNU ZRTP howto][zrtphow]. Both are part of the GNU Telephony wiki and are
106located in its documentation category.
107
108Source code in the directory `clients/tivi` and below is not licensed under the
109GNU LGPL and is for reference and review only. Refer to the copyright statments
110of the source code in these directories, in particular the sqlite3 sources which
111have their own license.
112
113[zrtphow]:  http://www.gnutelephony.org/index.php/GNU_ZRTP_How_To
114[zrtpfaq]:  http://www.gnutelephony.org/index.php/ZRTP_FAQ
115[rfc 6189]: http://tools.ietf.org/html/rfc6189
116
117## Building GNU ZRTP C++
118Since version 1.6 GNU ZRTP C++ supports the *cmake* based build process
119only. The cmake build process is simpler than the GNU automake/autoconf
120process. To build GNU ZRTP C++ perform the following steps after you unpacked
121the source archive or pulled the source from [Github][]:
122
123    cd <zrtpsrc_dir>
124    mkdir build
125    cd build
126    cmake ..
127    make
128
129The CMakeLists.txt supports several options. If you don't specify any options
130then `cmake` generates the build that supports GNU ccRTP library and it uses
131the standalone cryptographic modules, thus no it's not necessary to install an
132cryptographic library on the system. Optionally you may configure ZRTP to use
133_sqlite3_ instead of a simple file to store the ZRTP cache data. For example
134
135    cmake -DSQLITE=true ..
136
137creates the build files that use _sqlite3_.
138
139Please have a look at the `CMakeLists.txt` for other options.
140
141Running cmake in a separate `build` directory is the preferred way. Cmake and
142the following `make` generate all files in or below the build directory. Thus
143the base directory and the source directories are not polluted with `*.o`,
144`*.la`, or other files that result from the build process. You may delete the
145build directory and create a new one to start from fresh (this is the ultimate
146`make clean` :-) ) or you may create a second directory to build with
147different settings without mixing the two builds.
148
149[github]: http://github.com/wernerd/ZRTPCPP
150
151
152### Notes when building ZRTP C++ for Android
153
154The CMake files support creation of an `Android.mk` file for the Tivi client
155and may give you an idea how to do it for other clients. The generated
156`Android.mk` generates `buildinfo_*.c` files in the root directory. You may
157delete these files after the Android static libraries are ready.
158
159Since version 4.1.1 the example Android build files require NDK r9c or better.
160