GNU ZRTP
Introduction
GNU ZRTP is a C++ implementation of Phil Zimmermann's ZRTP specification, and is available under the GPL license. The corresponding Java implementation is GNU ZRTP4J.
The complete implementation consist of two main parts, the GNU ZRTP core and RTP/SRTP-implementation-specific glue code:
- The GNU ZRTP core is independent of a specific RTP/SRTP stack and of the operating system. It consists of the ZRTP protocol state engine, the ZRTP protocol messages, and the GNU ZRTP engine. The GNU ZRTP engine provides methods to set up ZRTP messages and to analyze received ZRTP messages, to compute the cryptographic data required for SRTP, and to maintain the required hashes and HMAC.
- The second part of a GNU ZRTP implementation is specific glue code that binds the GNU ZRTP core to the actual RTP/SRTP implementation, and provides operating-system-specific services such as timers, threads, or mutexes. The current GNU ZRTP distribution contains glue code to bind GNU ZRTP to GNU ccRTP.
The RTP/SRTP-specific glue code provides the application interface to set up and control the behavior of GNU ZRTP. Applications never access the GNU ZRTP core directly.
Development
[2013] – GNU ZRTP C++ implements ZRTP as specified in the RFC 6189.
GNU ZRTP C++ does not support some additional and optional features of ZRTP such as Pre-shared mode. However, to keep the external interface as stable as possible, I already implemented stubs for the additional features. Some later versions may have these features implemented, depending whether they are required by the community.
The current version of GNU ZRTP C++ is compatible and was tested to work with the latest Zfone implementation and my other VoIP clients that use ZRTP.
Downloading
The GNU ZRTP main repository is available on Github. The master Git branch of this repository contains the latest release. The code in the Github repository was peer-reviewed several times and many VoIP projects use it. GNU ZRTP is also available for the PJSIP project, and as a Gstreamer filter. Please check the relevant repositories here.
Other versions, usually modified or older versions of GNU ZRTP, are in libzrtpcpp and may be downloaded from ftp.gnu.org or one of its mirrors. Please use a nearby mirror if you can.
Please make sure that you download the most current version.
GNU ZRTP C++ may be available from other sites in various package formats,
including GNU/Linux RPM and Debian packages, .pkg
files under
various Unix operating systems, etc. I do encourage people to distribute GNU
ZRTP C++ in a package form where convenient for installation, so long as
source is also made available.
Documentation
A reference manual is distributed with the source package of GNU ZRTP C++. It is automatically generated from the sources through Doxygen. You can also look at two versions online:
- libzrtpcpp-2.3.4, as part of the ccRTP 2.1.2 Reference Manual,
- GNU ZRTP C++ and ccRTP extension for ZRTP — 2008 (archived).
User manuals:
Participating
As the current GNU ZRTP maintainer, I am very open to bringing new ideas and code into GNU ZRTP.
GNU ZRTP uses the same mailing list as GNU ccRTP: <[email protected]>. There is also a web interface for subscribing, modifying subscription options and searching the list archives. Feel free to send any bug reports, patches, and questions to this list.
Used By
- The Twinkle SIP soft phone uses GNU ZRTP as a plugin.
This page was retrieved from the Wayback Machine archive of the GNU Telephony website (licensed under the Free Documentation License 1.3), and slightly edited.