Java implementation was developed focusing and paying particular attention to mobile platforms, during the development of PrivateGSM product for Blackberry.

It contains:

Mobile Optimized

Since mobile platforms have strict constraints on resources consumption we put great care in producing an optimized version, in order to optimize:

CPU usage

Intensive CPU usage leads to battery consumption, leaving the user with a dead phone. Java implementation provides an abstraction layer to leverage on native platform encryption APIs provided by Blackberry platform (former Certicom APIs). While not done by us yet, we expect that it would be very easy and quick to add a new backend based on J2SE Crypto APIs or directly on BouncyCastle implementation.

Memory usage

Another major issue with java development is garbage collection. Every time you allocate a new Object on the heap you are producing garbage that later should be thrown away. On J2SE this is not an issue anymore, generally, but on mobile it's still a big issue that you should be aware of and worried about, particularly because mobile garbage collectors are not very efficient, eg: on blackberry JVM the GC stops the world, even for some seconds, and this is not acceptable when you are doing real-time communication!

Our implementation is particularly efficient regarding Objects reuse to reduce at minimum the GC activity.

ZRTP features

Current Java implementation is not complete ZRTP RFC draft, but it supports almost everything required to implement a secure VoIP client with end-to-end security.
Key exchange support
*Not working in blackberry crypto backend due to some issues with Certicom implementation
SRTP encryption
Cache support
Random Number Generation
MitM detection
ZRTP SIP support

Supported Platforms