* #35924 (zrtp): switch to libzrtpcpp
diff --git a/jni/libzrtp/sources/CMakeLists.txt b/jni/libzrtp/sources/CMakeLists.txt
index 399e776..752e29f 100755
--- a/jni/libzrtp/sources/CMakeLists.txt
+++ b/jni/libzrtp/sources/CMakeLists.txt
@@ -11,37 +11,54 @@
cmake_minimum_required(VERSION 2.6)
PROJECT(libzrtpcpp)
-set (VERSION 2.3.4)
-set (PACKAGE libzrtpcpp)
-set (SOVERSION ${VERSION})
-STRING(REGEX REPLACE "[.].*$" "" SOVERSION ${SOVERSION})
-SET(CPACK_PACKAGE_VERSION_MAJOR ${SOVERSION})
-SET(CPACK_PACKAGE_VERSION_MINOR ${VERSION})
-SET(CPACK_PACKAGE_VERSION_PATCH ${VERSION})
-STRING(REGEX REPLACE "[.][0-9]*$" "" CPACK_PACKAGE_VERSION_MINOR ${VERSION})
-STRING(REGEX REPLACE ".*[.]" "" CPACK_PACKAGE_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR})
-STRING(REGEX REPLACE ".*[.]" "" CPACK_PACKAGE_VERSION_PATCH ${VERSION})
+SET(CPACK_PACKAGE_VERSION_MAJOR 4)
+SET(CPACK_PACKAGE_VERSION_MINOR 0)
+SET(CPACK_PACKAGE_VERSION_PATCH 0)
-if(CMAKE_GENERATOR MATCHES "Unix Makefiles")
- add_custom_target(cleandist
- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
- COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}[-_]*.gz"
- COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}_*.dsc"
- COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}-*.rpm"
- COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}[-_]*.deb"
- COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}[-_]*.changes"
- COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}-*.zip"
- )
+set (VERSION 4.0.0)
+set (SOVERSION 4)
- add_custom_target(dist
- DEPENDS cleandist
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
- COMMAND git archive --format tar --output="${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}-${VERSION}.tar" --prefix="${PACKAGE}-${VERSION}/" HEAD
- COMMAND gzip "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}-${VERSION}.tar"
- )
+# Define supported command line parameters.
+#
+# Example to build the tivi client: cmake -DTIVI=true ..
+# Without any options cmake generates libzrtpcpp for use with GNU ccRTP
+#
+option(CCRTP "Build library to use with GNU ccRTP." OFF)
+option(CORE_LIB "Build core library only, no spcific client support." OFF)
+option(CRYPTO_STANDALONE "Use embedded crypto and big number modules." ON)
+option(TIVI "Build library for the tivi client, implies '-DCRYPTO_STNDALONE=true'." OFF)
+option(SQLITE "Use SQLite DB as backend for ZRTP cache." OFF)
+
+option(ANDROID "Generate Android makefiles (Android.mk)" ON)
+option(JAVA "Generate Java support files (requires JDK and SWIG)" OFF)
+
+
+# **** Check what and how to build ****
+#
+if (CCRTP AND TIVI)
+ MESSAGE(FATAL_ERROR "Cannot build more than one client at once. Use different build directories.")
endif()
+if (CCRTP)
+ set (PACKAGE libzrtpcpp)
+ set(zrtplibName zrtpcpp)
+elseif (TIVI)
+ set (PACKAGE libzrtptivi)
+ set(zrtplibName zrtptivi)
+ set(CRYPTO_STANDALONE true)
+ set(SQLITE true)
+elseif (CORE_LIB)
+ set (PACKAGE libzrtpcore)
+ set(zrtplibName zrtpcppcore)
+else()
+ MESSAGE(WARNING "No client defined, building for GNU ccRTP.")
+ set (PACKAGE libzrtpcpp)
+ set(CCRTP true)
+ set(zrtplibName zrtpcpp)
+endif()
+
+
if(MSVC60)
set(BUILD_STATIC ON CACHE BOOL "static linking only" FORCE)
MARK_AS_ADVANCED(BUILD_STATIC)
@@ -50,26 +67,18 @@
endif()
# set to true for debug and trace during CMakeLists development
-set(CMAKE_VERBOSE_MAKEFILE FALSE)
+# set(CMAKE_VERBOSE_MAKEFILE TRUE)
-MESSAGE( STATUS "Configuring GNU ${PROJECT_NAME} ${VERSION}...")
+execute_process(COMMAND git rev-parse --short HEAD OUTPUT_VARIABLE GIT_COMMIT)
+STRING(REGEX REPLACE "(\r?\n)+$" "" GIT_COMMIT "${GIT_COMMIT}")
+
+MESSAGE( STATUS "Configuring GNU ${PROJECT_NAME} ${VERSION} for ${PACKAGE}, commit: ${GIT_COMMIT} ...")
# include most of the fine stuff we need
-include(cmake/Modules/FindGcryptConfig.cmake)
include(FindPkgConfig)
include(CheckLibraryExists)
include(CheckIncludeFiles)
-include(cmake/Modules/AutoArgs.cmake)
-
-if(${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
- include(cmake/Modules/GeneratePackage.cmake)
-
- GENERATE_PACKAGING(${PACKAGE} ${VERSION})
-endif()
-
-# check the -Denable-ccrtp setting, defaults to true
-enable_arg(ccrtp true "Enable GNU ccRTP support for GNU ZRTP")
-args_help()
+include(CheckFunctionExists)
if (NOT LIB_SUFFIX)
set(LIBDIRNAME "lib")
@@ -83,118 +92,174 @@
set(LIBDIRNAME "lib${LIB_SUFFIX}")
endif()
-# setup the Thread include and lib
-find_package(Threads)
-if(CMAKE_HAVE_PTHREAD_H)
- set(HAVE_PTHREAD_H TRUE)
-endif()
-set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT})
-
-# define the name of the lib. zrtpcppcore does not include the ccRTP stuff.
-set(zrtplib zrtpcppcore)
-if(enable_ccrtp)
- if (USES_CCRTP_INCLUDE_DIRS)
- message(STATUS " Using local commoncpp dependency")
- else()
- find_package(PkgConfig)
- pkg_check_modules(USES_CCRTP libccrtp>=2.0.0)
- endif()
- include_directories(${USES_CCRTP_INCLUDE_DIRS})
- link_directories(${USES_CRTP_LIBRARY_DIRS})
- add_definitions(${USES_CCRTP_CFLAGS})
- set (LIBS ${LIBS} ${USES_CCRTP_LDFLAGS} ${USES_CCRTP_LIBRARIES})
- set(zrtplib zrtpcpp)
-endif()
-
-# now get info about crypto libraries
-pkg_check_modules(OPENSSL libcrypto>=0.9.8)
-if (OPENSSL_FOUND)
- set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${OPENSSL_INCLUDE_DIRS}) #update include files search directory
- check_include_files(openssl/bn.h HAVE_OPENSSL_BN_H)
- check_include_files(openssl/aes.h HAVE_OPENSSL_AES_H)
- check_include_files(openssl/sha.h HAVE_OPENSSL_SHA_H)
- check_include_files(openssl/ec.h HAVE_OPENSSL_EC_H)
- check_library_exists(crypto EVP_CipherInit_ex "${OPENSSL_LIBDIR}" HAVE_SSL_CRYPT) #use search lib directory from pkg-config
- set(LIBS ${LIBS} -lcrypto)
- set(CRYPTOBACKEND "libcrypto >= 0.9.8")
- set(BUILD_REQ "libopenssl-devel >= 0.9.8")
- set(PACKAGE_REQ "libopenssl >= 0.9.8")
- include_directories(${OPENSSL_INCLUDE_DIRS}) #update includes directory from pkg-config
-endif()
-
-if(NOT HAVE_OPENSSL_EC_H)
- gcr_check(GCRYPT gcrypt)
- if(GCRYPT_FOUND)
- check_include_files(gcrypt.h HAVE_GCRYPT_H)
- set(LIBS ${LIBS} ${GCRYPT_LIBRARIES})
- set(BUILD_REQ "libgcrypt-devel")
- set(CRYPTOBACKEND="")
- set(PACKAGE_REQ "libgcrypt")
- endif()
-endif()
-
-if(NOT OPENSSL_FOUND AND NOT GCRYPT_FOUND)
- message(FATAL_ERROR "No crypto library found")
-endif()
-
check_include_files(stdlib.h HAVE_STDLIB_H)
check_include_files(string.h HAVE_STRING_H)
-# necessary and required modules checked, ready to generate config.h
-configure_file(libzrtpcpp-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/libzrtpcpp-config.h)
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
+if (NOT CRYPTO_STANDALONE)
+ pkg_check_modules(OPENSSL libcrypto>=0.9.8)
+ if (OPENSSL_FOUND)
+ set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${OPENSSL_INCLUDE_DIRS}) #update include files search directory
+ check_include_files(openssl/bn.h HAVE_OPENSSL_BN_H)
+ check_include_files(openssl/aes.h HAVE_OPENSSL_AES_H)
+ check_include_files(openssl/sha.h HAVE_OPENSSL_SHA_H)
+ check_library_exists(crypto EVP_CipherInit_ex "${OPENSSL_LIBDIR}" HAVE_SSL_CRYPT) #use search lib directory from pkg-config
+ set(LIBS ${LIBS} -lcrypto)
+ set(CRYPTOBACKEND "libcrypto >= 0.9.8")
+ set(BUILD_REQ "libopenssl-devel >= 0.9.8")
+ set(PACKAGE_REQ "libopenssl >= 0.9.8")
+ include_directories(${OPENSSL_INCLUDE_DIRS}) #update includes directory from pkg-config
+ else()
+ message(FATAL_ERROR "No crypto library found")
+ endif()
+else()
+ # For crypto standalone mode we need to configure the bnlib. In a first step
+ # without the tests and demos.
+ check_include_files(stdint.h HAVE_STDINT_H)
+ check_include_files(stdint.h HAVE_ASSERT_H)
+ check_include_files(limits.h HAVE_LIMITS_H)
-# the following set(...) commands are only to have backward
-# compatibility with autoconf stuff to generate the pc file
-set(prefix ${CMAKE_INSTALL_PREFIX})
-set(exec_prefix ${prefix}/bin)
-set(libdir ${prefix}/${LIBDIRNAME})
-set(includedir ${prefix}/include)
-set(PACKAGE pkgconfig)
-configure_file(libzrtpcpp.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/lib${zrtplib}.pc @ONLY)
+ check_function_exists(memmove HAVE_MEMMOVE)
+ check_function_exists(memcpy HAVE_MEMCPY)
-configure_file(libzrtpcpp.spec.cmake ${CMAKE_CURRENT_BINARY_DIR}/libzrtpcpp.spec @ONLY)
+ # TODO: check if we compile the tests for bnlib
+ #
+ # check_function_exists(clock_gettime HAVE_CLOCK_GETTIME)
+ # check_function_exists(getrusage HAVE_GETRUSAGE)
+ # check_function_exists(clock HAVE_CLOCK)
+ # check_function_exists(time HAVE_TIME)
-#to make sure includes are first taken from those directory
-include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src)
+ # Check if Solaris-style gethrvtime() is available
+ # check_function_exists(gethrvtime HAVE_GETHRVTIME)
+ #
+ # until here
+
+ # necessary and required modules checked, ready to generate config.h
+ configure_file(${CMAKE_SOURCE_DIR}/bnlib/bnconfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/bnconfig.h)
+endif()
+
+if (SQLITE)
+ pkg_check_modules(SQLITE3 sqlite3>=3.7)
+ if (SQLITE3_FOUND)
+ check_include_files(sqlite3.h HAVE_SQLITE_H)
+ set(LIBS ${LIBS} -lsqlite3)
+ else()
+ message(FATAL_ERROR "SQLite3 library not found")
+ endif()
+endif()
+
+# necessary and required modules checked, ready to generate config.h in top-level build directory
+configure_file(config.h.cmake ${CMAKE_BINARY_DIR}/config.h)
add_definitions(-g -O2 -fno-strict-aliasing)
if(CMAKE_COMPILER_IS_GNUCXX)
- add_definitions(-Wno-long-long -Wno-char-subscripts)
- add_definitions(-Wall -pedantic)
- add_definitions(-DNEW_STDCPP)
+# add_definitions(-Wno-long-long -Wno-char-subscripts)
+# add_definitions(-Wall -ansi -pedantic)
+# add_definitions(-Wall -pedantic)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -pedantic -std=c99")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -std=c++11")
+ add_definitions(-DNEW_STDCPP)
endif()
-add_subdirectory(src)
+include_directories(BEFORE ${CMAKE_BINARY_DIR})
+include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/zrtp)
-if (enable_ccrtp)
+if(CRYPTO_STANDALONE)
+ add_definitions(-DSUPPORT_NON_NIST)
+ include_directories (${CMAKE_SOURCE_DIR}/bnlib)
+endif()
+
+if (NOT CCRTP)
+ set (sdes_src ${CMAKE_SOURCE_DIR}/zrtp/ZrtpSdesStream.cpp)
+endif()
+
+# **** The following source files a common for all clients ****
+#
+set(zrtp_src_no_cache
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpCallbackWrapper.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZRtp.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpCrc32.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketCommit.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketConf2Ack.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketConfirm.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketDHPart.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketGoClear.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketClearAck.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketHelloAck.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketHello.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketError.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketErrorAck.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketPingAck.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketPing.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketSASrelay.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpPacketRelayAck.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpStateClass.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpTextData.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpConfigure.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZrtpCWrapper.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/Base32.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/zrtpB64Encode.c
+ ${CMAKE_SOURCE_DIR}/zrtp/zrtpB64Decode.c
+ ${CMAKE_SOURCE_DIR}/common/osSpecifics.c ${sdes_src})
+
+set(bnlib_src
+ ${CMAKE_SOURCE_DIR}/bnlib/bn00.c
+ ${CMAKE_SOURCE_DIR}/bnlib/lbn00.c
+ ${CMAKE_SOURCE_DIR}/bnlib/bn.c
+ ${CMAKE_SOURCE_DIR}/bnlib/lbnmem.c
+ ${CMAKE_SOURCE_DIR}/bnlib/sieve.c
+ ${CMAKE_SOURCE_DIR}/bnlib/prime.c
+ ${CMAKE_SOURCE_DIR}/bnlib/bnprint.c
+ ${CMAKE_SOURCE_DIR}/bnlib/jacobi.c
+ ${CMAKE_SOURCE_DIR}/bnlib/germain.c
+ ${CMAKE_SOURCE_DIR}/bnlib/ec/ec.c
+ ${CMAKE_SOURCE_DIR}/bnlib/ec/ecdh.c
+ ${CMAKE_SOURCE_DIR}/bnlib/ec/curve25519-donna.c)
+
+set(zrtp_skein_src
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/skeinMac256.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/skein256.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/skeinMac384.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/skein384.cpp)
+
+set(zrtp_crypto_src
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/zrtpDH.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/hmac256.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/sha256.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/hmac384.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/sha384.cpp
+
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/aesCFB.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/twoCFB.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/crypto/sha2.c)
+
+if (NOT SQLITE)
+ set(zrtp_src ${zrtp_src_no_cache}
+ ${CMAKE_SOURCE_DIR}/zrtp/ZIDCacheFile.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZIDRecordFile.cpp)
+else()
+ set(zrtp_src ${zrtp_src_no_cache}
+ ${CMAKE_SOURCE_DIR}/zrtp/ZIDCacheDb.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/ZIDRecordDb.cpp
+ ${CMAKE_SOURCE_DIR}/zrtp/zrtpCacheSqliteBackend.c)
+
+endif()
+
+if (CCRTP)
+ add_subdirectory(clients/ccrtp)
add_subdirectory(demo)
endif()
-if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/package/)
- MESSAGE(STATUS "package dir not found")
- file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/package/)
+if (TIVI)
+ add_subdirectory(clients/tivi)
endif()
-########### install files ###############
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${zrtplib}.pc DESTINATION ${LIBDIRNAME}/pkgconfig)
-
-if(${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
-
- ########### Add uninstall target ###############
- configure_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
- "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
- IMMEDIATE @ONLY)
- add_custom_target(uninstall
- "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
-
+if (CORE_LIB)
+ add_subdirectory(clients/no_client)
endif()
+
##very usefull for macosx, specially when using gtkosx bundler
if(APPLE)
if (NOT CMAKE_INSTALL_NAME_DIR)
set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "CMAKE_INSTALL_NAME_DIR set for macosx" )
endif (NOT CMAKE_INSTALL_NAME_DIR)
endif(APPLE)
-
-