diff --git a/include/zrtp_base.h b/include/zrtp_base.h index 9e32143cfa..2b03352d5b 100644 --- a/include/zrtp_base.h +++ b/include/zrtp_base.h @@ -79,10 +79,7 @@ typedef struct zrtp_session_info_t zrtp_session_info_t; * big-endian (most significant byte first). */ -ZRTP_INLINE uint16_t zrtp_swap16(uint16_t x) { - return (x >> 8 | x << 8); -} - +uint16_t zrtp_swap16(uint16_t x); uint32_t zrtp_swap32(uint32_t x); uint64_t zrtp_swap64(uint64_t x); diff --git a/include/zrtp_config.h b/include/zrtp_config.h index 0b67868fd9..d781043fde 100644 --- a/include/zrtp_config.h +++ b/include/zrtp_config.h @@ -17,7 +17,9 @@ * If platworm is not specified manually in zrtp_config_user.h - try to detect it aytomatically */ #if !defined(ZRTP_PLATFORM) -# if defined(linux) || defined(__linux) +# if defined(ANDROID_NDK) +# define ZRTP_PLATFORM ZP_ANDROID +# elif defined(linux) || defined(__linux) # include # define ZRTP_PLATFORM ZP_LINUX # elif defined(__MACOSX__) || defined (__APPLE__) || defined (__MACH__) @@ -38,7 +40,9 @@ # endif #endif -#if (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) || defined(ZRTP_AUTOMAKE) +#if ZRTP_PLATFORM == ZP_ANDROID +# include "zrtp_config_android.h" +#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) || defined(ZRTP_AUTOMAKE) # include "zrtp_config_unix.h" #elif (ZRTP_PLATFORM == ZP_WIN32) || (ZRTP_PLATFORM == ZP_WIN32_KERNEL) || (ZRTP_PLATFORM == ZP_WINCE) # include "zrtp_config_win.h" @@ -59,7 +63,7 @@ /* * ZRTP BYTEORDER DETECTION - * If the byte order is not specified manually in zrtp_config_user.h - try to detect it aytomatically + * If the byte order is not specified manually in zrtp_config_user.h - try to detect it automatically */ #if !defined(ZRTP_BYTE_ORDER) @@ -139,7 +143,7 @@ # endif #endif -#if (ZRTP_PLATFORM == ZP_WINCE) || (ZRTP_PLATFORM == ZP_SYMBIAN) +#if (ZRTP_PLATFORM == ZP_WINCE) || (ZRTP_PLATFORM == ZP_SYMBIAN) || (ZRTP_PLATFORM == ZP_ANDROID) # define ALIGNMENT_32BIT_REQUIRED #endif diff --git a/include/zrtp_config_android.h b/include/zrtp_config_android.h new file mode 100644 index 0000000000..b13bc3f6b5 --- /dev/null +++ b/include/zrtp_config_android.h @@ -0,0 +1,101 @@ +/* + * libZRTP SDK library, implements the ZRTP secure VoIP protocol. + * Copyright (c) 2006-2009 Philip R. Zimmermann. All rights reserved. + * Contact: http://philzimmermann.com + * For licensing and other legal details, see the file zrtp_legal.c. + * + * Viktor Krykun + */ + +#ifndef ZRTP_SYMB_CONFIG_H__ +#define ZRTP_SYMB_CONFIG_H__ + +#ifndef ZRTP_HAVE_STDIO_H +# define ZRTP_HAVE_STDIO_H 1 +#endif + +#ifndef ZRTP_HAVE_STDARG_H +# define ZRTP_HAVE_STDARG_H 1 +#endif + + +#ifndef NO_ASSERT_H +# define NO_ASSERT_H 1 +#endif + +#ifndef NO_STDLIB_H +# define NO_STDLIB_H 0 +#endif +//#define ZRTP_HAVE_INTTYPES_H 1 +#ifndef ZRTP_HAVE_UNISTD_H +# define ZRTP_HAVE_UNISTD_H 1 +#endif + +#ifndef ZRTP_HAVE_PTHREAD_H +# define ZRTP_HAVE_PTHREAD_H 1 +#endif + +#ifndef ZRTP_HAVE_SEMAPHORE_H +#define ZRTP_HAVE_SEMAPHORE_H 1 +#endif + +#ifndef ZRTP_HAVE_ERRNO_H +#define ZRTP_HAVE_ERRNO_H 1 +#endif + +#ifndef ZRTP_HAVE_FCNTL_H +#define ZRTP_HAVE_FCNTL_H 1 +#endif + +#ifndef ZRTP_HAVE_SYS_TIME_H +# define ZRTP_HAVE_SYS_TIME_H 1 +#endif + + +#ifndef ZRTP_HAVE_SYS_TYPES_H +# define ZRTP_HAVE_SYS_TYPES_H 1 +#endif + + +#ifndef ZRTP_HAVE_INTTYPES_H +# define ZRTP_HAVE_INTTYPES_H 1 +#endif + +#ifndef ZRTP_HAVE_STDINT_H +# define ZRTP_HAVE_STDINT_H 1 +#endif + +#ifndef ZRTP_HAVE_LINUX_VERSION_H +# define ZRTP_HAVE_LINUX_VERSION_H 0 +#endif + + +// (ZRTP_PLATFORM == ZP_ANDROID) + + +#define ZRTP_HAVE_INT64_T 1 +#define ZRTP_HAVE_INT32_T 1 +#define ZRTP_HAVE_INT16_T 1 +#define ZRTP_HAVE_INT8_T 1 + +#define ZRTP_HAVE_UINT64_T 1 +#define ZRTP_HAVE_UINT32_T 1 +#define ZRTP_HAVE_UINT16_T 1 +#define ZRTP_HAVE_UINT8_T 1 + +#define ZRTP_BYTE_ORDER ZBO_LITTLE_ENDIAN + +#define SIZEOF_UNSIGNED_LONG 4 +#define SIZEOF_UNSIGNED_LONG_LONG 8 + +#define ZRTP_INLINE inline + +#define ZRTP_USE_BUILTIN_CACHE 1 +#define ZRTP_USE_BUILTIN_SCEHDULER 1 +#undef ZRTP_USE_STACK_MINIM +#define ZRTP_USE_STACK_MINIM 1 +#undef ZRTP_ENABLE_EC +#define ZRTP_ENABLE_EC 0 +#define ALIGNMENT_32BIT_REQUIRED + +#endif /* ZRTP_WIN_CONFIG_H__ */ diff --git a/include/zrtp_config_user.h b/include/zrtp_config_user.h index b9d361bdc2..c87a6c790e 100644 --- a/include/zrtp_config_user.h +++ b/include/zrtp_config_user.h @@ -53,7 +53,8 @@ #define ZP_SYMBIAN 105 /** \brief Constant to define ZRTP BSD platform */ #define ZP_BSD 107 - +/** \brief Constant to define ZRTP Android platform */ +#define ZP_ANDROID 108 /** \brief Define Platform manually there */ //#undefine ZRTP_PLATFORM diff --git a/include/zrtp_iface_scheduler.h b/include/zrtp_iface_scheduler.h index f2ca0181dc..2fe27c447a 100644 --- a/include/zrtp_iface_scheduler.h +++ b/include/zrtp_iface_scheduler.h @@ -41,7 +41,7 @@ extern "C" #if (ZRTP_PLATFORM == ZP_WIN32) || (ZRTP_PLATFORM == ZP_WINCE) #include typedef LPTHREAD_START_ROUTINE zrtp_thread_routine_t; -#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) +#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) || (ZRTP_PLATFORM == ZP_ANDROID) typedef void *(*zrtp_thread_routine_t)(void*); #elif (ZRTP_PLATFORM == ZP_SYMBIAN) typedef int(*zrtp_thread_routine_t)(void*); diff --git a/include/zrtp_version.h b/include/zrtp_version.h index 61ea0cbd6a..5afc3b76af 100644 --- a/include/zrtp_version.h +++ b/include/zrtp_version.h @@ -12,8 +12,8 @@ #define LIBZRTP_VERSION_MAJOR 1 -#define LIBZRTP_VERSION_MINOR 12 -#define LIBZRTP_VERSION_BUILD 600 -#define LIBZRTP_VERSION_STR "v1.12 600" +#define LIBZRTP_VERSION_MINOR 13 +#define LIBZRTP_VERSION_BUILD 604 +#define LIBZRTP_VERSION_STR "v1.13 604" #endif /*__ZRTP_VERSION_H__*/ diff --git a/projects/android/jni/Android.mk b/projects/android/jni/Android.mk new file mode 100644 index 0000000000..cb3837b6bf --- /dev/null +++ b/projects/android/jni/Android.mk @@ -0,0 +1,72 @@ +LOCAL_PATH := $(call my-dir)/../../.. + +include $(CLEAR_VARS) + +LOCAL_MODULE := libzrtp +MY_SRC_PATH := src + +MY_SRC_FILES := $(MY_SRC_PATH)/zrtp.c \ + $(MY_SRC_PATH)/zrtp_crc.c \ + $(MY_SRC_PATH)/zrtp_crypto_aes.c \ + $(MY_SRC_PATH)/zrtp_crypto_atl.c \ + $(MY_SRC_PATH)/zrtp_crypto_hash.c \ + $(MY_SRC_PATH)/zrtp_crypto_pk.c \ + $(MY_SRC_PATH)/zrtp_crypto_sas.c \ + $(MY_SRC_PATH)/zrtp_datatypes.c \ + $(MY_SRC_PATH)/zrtp_engine.c \ + $(MY_SRC_PATH)/zrtp_engine_driven.c \ + $(MY_SRC_PATH)/zrtp_iface_cache.c \ + $(MY_SRC_PATH)/zrtp_iface_scheduler.c \ + $(MY_SRC_PATH)/zrtp_iface_sys.c \ + $(MY_SRC_PATH)/zrtp_initiator.c \ + $(MY_SRC_PATH)/zrtp_legal.c \ + $(MY_SRC_PATH)/zrtp_list.c \ + $(MY_SRC_PATH)/zrtp_log.c \ + $(MY_SRC_PATH)/zrtp_pbx.c \ + $(MY_SRC_PATH)/zrtp_protocol.c \ + $(MY_SRC_PATH)/zrtp_responder.c \ + $(MY_SRC_PATH)/zrtp_rng.c \ + $(MY_SRC_PATH)/zrtp_srtp_builtin.c \ + $(MY_SRC_PATH)/zrtp_srtp_dm.c \ + $(MY_SRC_PATH)/zrtp_string.c \ + $(MY_SRC_PATH)/zrtp_utils.c \ + $(MY_SRC_PATH)/zrtp_utils_proto.c + +MY_SRC_FILES += third_party/bgaes/aes_modes.c \ + third_party/bgaes/sha2.c \ + third_party/bgaes/sha1.c \ + third_party/bgaes/aestab.c \ + third_party/bgaes/aeskey.c \ + third_party/bgaes/aescrypt.c + +MY_SRC_FILES += third_party/bnlib/bn.c \ + third_party/bnlib/bn32.c \ + third_party/bnlib/bninit32.c \ + third_party/bnlib/lbn32.c \ + third_party/bnlib/lbnmem.c \ + third_party/bnlib/legal.c + +LOCAL_SRC_FILES := $(MY_SRC_FILES) + +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include + +LOCAL_C_INCLUDES := $(LOCAL_PATH)/include +LOCAL_C_INCLUDES += $(LOCAL_PATH)/third_party/bnlib +LOCAL_C_INCLUDES += $(LOCAL_PATH)/third_party/bgaes + +LOCAL_ARM_MODE := arm +LOCAL_CFLAGS := -DANDROID_NDK=5 + +#include $(BUILD_STATIC_LIBRARY) +include $(BUILD_SHARED_LIBRARY) + +# +# Dummy shared library to build libzrtp.a +# + +# include $(CLEAR_VARS) +# +# LOCAL_MODULE := libzrtp-dummy +# LOCAL_STATIC_LIBRARIES := libzrtp +# +# include $(BUILD_SHARED_LIBRARY) diff --git a/projects/gnu/configure.in b/projects/gnu/configure.in index 1af09c172e..d25d41771a 100644 --- a/projects/gnu/configure.in +++ b/projects/gnu/configure.in @@ -32,7 +32,7 @@ case $target_os in esac -AM_INIT_AUTOMAKE([libzrtp], [1.12]) +AM_INIT_AUTOMAKE([libzrtp], [1.14]) AX_PREFIX_CONFIG_H(../../include/zrtp_config_unix.h,ZRTP,config/config.h) CFLAGS="$CFLAGS -Wno-unused-parameter -fno-strict-aliasing -fPIC -DZRTP_AUTOMAKE=1" diff --git a/src/zrtp_datatypes.c b/src/zrtp_datatypes.c index 2da8fdc636..980fb88a88 100644 --- a/src/zrtp_datatypes.c +++ b/src/zrtp_datatypes.c @@ -86,6 +86,10 @@ void zrtp_v128_xor(zrtp_v128_t *z, zrtp_v128_t *x, zrtp_v128_t *y) } /*---------------------------------------------------------------------------*/ +uint16_t zrtp_swap16(uint16_t x) { + return (x >> 8 | x << 8); +} + uint32_t zrtp_swap32(uint32_t x) { uint32_t res = (x >> 8 & 0x0000ff00) | (x << 8 & 0x00ff0000); diff --git a/src/zrtp_iface_scheduler.c b/src/zrtp_iface_scheduler.c index 8fde5d5787..ee7bb3d763 100644 --- a/src/zrtp_iface_scheduler.c +++ b/src/zrtp_iface_scheduler.c @@ -79,7 +79,7 @@ int zrtp_thread_create(zrtp_thread_routine_t start_routine, void *arg) return 0; } -#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) +#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) || (ZRTP_PLATFORM == ZP_ANDROID) #if ZRTP_HAVE_UNISTD_H == 1 #include #else @@ -93,7 +93,8 @@ int zrtp_thread_create(zrtp_thread_routine_t start_routine, void *arg) int zrtp_sleep(unsigned int msec) { - return usleep(msec*1000); + usleep(msec*1000); + return 0; } int zrtp_thread_create(zrtp_thread_routine_t start_routine, void *arg) diff --git a/src/zrtp_iface_sys.c b/src/zrtp_iface_sys.c index 81ec38f41e..f26b651a38 100644 --- a/src/zrtp_iface_sys.c +++ b/src/zrtp_iface_sys.c @@ -95,7 +95,7 @@ zrtp_status_t zrtp_mutex_unlock(zrtp_mutex_t* mutex) } /*---------------------------------------------------------------------------*/ -#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) +#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) || (ZRTP_PLATFORM == ZP_ANDROID) #if defined ZRTP_HAVE_PTHREAD_H # include @@ -236,7 +236,7 @@ zrtp_status_t zrtp_sem_post(zrtp_sem_t* sem) return (0 == ReleaseSemaphore(sem->sem, 1, NULL)) ? zrtp_status_fail : zrtp_status_ok; } -#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) +#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) || (ZRTP_PLATFORM == ZP_ANDROID) #if defined ZRTP_HAVE_STDIO_H # include @@ -445,7 +445,7 @@ zrtp_time_t zrtp_time_now() } /*---------------------------------------------------------------------------*/ -#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_SYMBIAN) || (ZRTP_PLATFORM == ZP_BSD) +#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_SYMBIAN) || (ZRTP_PLATFORM == ZP_BSD) || (ZRTP_PLATFORM == ZP_ANDROID) #if defined ZRTP_HAVE_SYS_TIME_H # include diff --git a/src/zrtp_log.c b/src/zrtp_log.c index 0b89583352..19ab390da1 100644 --- a/src/zrtp_log.c +++ b/src/zrtp_log.c @@ -105,7 +105,7 @@ static void zrtp_log(uint8_t is_clean, const char *sender, uint32_t level, cons # endif #elif (ZRTP_PLATFORM == ZP_WIN32_KERNEL) RtlStringCchVPrintfA(sline, ZRTP_LOG_BUFFER_SIZE-offset, format, marker); -#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) +#elif (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) || (ZRTP_PLATFORM == ZP_ANDROID) len = vsnprintf(sline, ZRTP_LOG_BUFFER_SIZE-offset, format, marker); #elif (ZRTP_PLATFORM == ZP_SYMBIAN) len = vsprintf(sline, format, marker); @@ -408,6 +408,8 @@ void zrtp_print_env_settings(zrtp_config_t* config) char* platform = "Linux OS"; #elif (ZRTP_PLATFORM == ZP_SYMBIAN) char* platform = "Symbian OS"; +#elif (ZRTP_PLATFORM == ZP_ANDROID) + char* platform = "Android OS"; #endif ZRTP_LOG(3,("zrtp","============================================================\n")); diff --git a/src/zrtp_rng.c b/src/zrtp_rng.c index aea1f39a79..db394a7a9e 100644 --- a/src/zrtp_rng.c +++ b/src/zrtp_rng.c @@ -158,7 +158,7 @@ int zrtp_add_system_state(zrtp_global_t* zrtp, MD_CTX *ctx) { return entropy_length; } -#elif ( (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) ) +#elif ( (ZRTP_PLATFORM == ZP_LINUX) || (ZRTP_PLATFORM == ZP_DARWIN) || (ZRTP_PLATFORM == ZP_BSD) || (ZRTP_PLATFORM == ZP_ANDROID) ) #if ZRTP_HAVE_STDIO_H == 1 # include