From GNU Telephony
GNU ZRTP is a C++ implementation of Phil Zimmermann's ZRTP specification and is available under the GPL license.
The complete GNU ZRTP implementation consists 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 the operationg system and consists of the ZRTP protocol state engine, the ZRTP protocol messages, and the GNU ZRTP engine. The GNU ZRTP engine provides methods to setup ZRTP message 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 the 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 behaviour of GNU ZRTP. Applications never access the GNU ZRTP core directly.
GNU ZRTP C++ implements the basic ZRTP as specified in the document draft-zimmermann-avt-zrtp. You may access this via the Zfone page.
GNU ZRTP C++ does not support some additional and optional features of ZRTP such as Pre-shared mode, PBX enrollement, and SAS Signature. 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 if they are required by the community.
The current version is compatible and was tested to work with the latest Zfone beta (dated 08-Feb-2009) (see Zfone project site).
A reference manual is distributed with the source package of GNU ZRTP C++. It is automatically generated from the sources through Doxygen. You can look at it online:
GNU ZRTP is distributed in GNU libzrtpcpp and may be downloaded from ftp.gnu.org.
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 "deb" 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 simple installation.
As the current GNU ZRTP maintainer, I am very open to bringing new ideas and code into GNU ZRTP. Some background of ZRTP and cryptographic algorithms are helpful. Anonymous cvs access is maintained for GNU ZRTP and is done via GNU ccrtp through savannah, and I would be happy to receive and evaluate patches for inclusion in future releases.
GNU ZRTP uses the same e-mail mailing list as GNU ccRTP. This list is available at firstname.lastname@example.org. 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.
- Twinkle SIP soft phone - Uses GNU ZRTP as a plugin