diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index a995b65f..b1043ccf 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -26,22 +26,18 @@ jobs: - os: ubuntu-latest BUILD_TYPE: default PACKAGES: asciidoc xmlto - CURVE: tweetnacl DRAFT: disabled POLLER: select - os: ubuntu-latest BUILD_TYPE: default - CURVE: tweetnacl DRAFT: disabled POLLER: poll - os: ubuntu-latest BUILD_TYPE: android - CURVE: tweetnacl DRAFT: disabled - os: ubuntu-latest BUILD_TYPE: coverage PACKAGES: libkrb5-dev libnorm-dev libpgm-dev libgnutls28-dev lcov - CURVE: tweetnacl DRAFT: enabled GSSAPI: enabled PGM: enabled @@ -52,7 +48,6 @@ jobs: - os: ubuntu-latest BUILD_TYPE: valgrind PACKAGES: valgrind libgnutls28-dev - CURVE: tweetnacl DRAFT: enabled - os: ubuntu-latest BUILD_TYPE: cmake @@ -102,18 +97,15 @@ jobs: - os: ubuntu-latest BUILD_TYPE: abi-compliance-checker PACKAGES: abi-dumper abi-compliance-checker - CURVE: tweetnacl DRAFT: disabled - os: ubuntu-latest BUILD_TYPE: cmake PACKAGES: clang-tidy clang-tools - CURVE: tweetnacl DRAFT: enabled CXX: clang++ - os: macos-latest BUILD_TYPE: default PACKAGES: automake autoconf - CURVE: tweetnacl DRAFT: enabled - os: macos-latest BUILD_TYPE: default diff --git a/CMakeLists.txt b/CMakeLists.txt index 46db37a6..ecdc7bce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -255,13 +255,13 @@ if(NOT MSVC) check_cxx_symbol_exists(strlcpy string.h ZMQ_HAVE_STRLCPY) endif() -# Select curve encryption library, defaults to tweetnacl To use libsodium instead, use --with-libsodium(must be +# Select curve encryption library, defaults to disabled To use libsodium instead, use --with-libsodium(must be # installed) To disable curve, use --disable-curve -option(WITH_LIBSODIUM "Use libsodium instead of built-in tweetnacl" ON) +option(WITH_LIBSODIUM "Use libsodium" OFF) option(WITH_LIBSODIUM_STATIC "Use static libsodium library" OFF) option(ENABLE_LIBSODIUM_RANDOMBYTES_CLOSE "Automatically close libsodium randombytes. Not threadsafe without getrandom()" ON) -option(ENABLE_CURVE "Enable CURVE security" ON) +option(ENABLE_CURVE "Enable CURVE security" OFF) if(ENABLE_CURVE) if(WITH_LIBSODIUM) @@ -280,17 +280,11 @@ if(ENABLE_CURVE) endif() else() message( - WARNING - "libsodium not installed, instead using builtin tweetnacl, you may want to install libsodium and run cmake again" + ERROR + "libsodium not installed, you may want to install libsodium and run cmake again" ) endif() endif() - if(NOT ZMQ_HAVE_CURVE) - message(STATUS "Using tweetnacl for CURVE security") - list(APPEND sources ${CMAKE_CURRENT_SOURCE_DIR}/src/tweetnacl.c) - set(ZMQ_USE_TWEETNACL 1) - set(ZMQ_HAVE_CURVE 1) - endif() else() message(STATUS "CURVE security is disabled") endif() diff --git a/Makefile.am b/Makefile.am index 7b796570..392d40cd 100755 --- a/Makefile.am +++ b/Makefile.am @@ -283,12 +283,6 @@ src_libzmq_la_SOURCES += \ external/wepoll/wepoll.h endif -if USE_TWEETNACL -src_libzmq_la_SOURCES += \ - src/tweetnacl.c \ - src/tweetnacl.h -endif - if HAVE_WS src_libzmq_la_SOURCES += \ src/ws_address.cpp \ @@ -847,11 +841,6 @@ tests_test_security_curve_SOURCES = \ src/err.hpp \ src/err.cpp -if USE_TWEETNACL -tests_test_security_curve_SOURCES += \ - src/tweetnacl.c -endif - tests_test_security_curve_LDADD = \ ${TESTUTIL_LIBS} src/libzmq.la $(LIBUNWIND_LIBS) $(LIBBSD_LIBS) tests_test_security_curve_CPPFLAGS = \ diff --git a/appveyor.yml b/appveyor.yml index f0a5d638..55907391 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -22,7 +22,7 @@ environment: - platform: Win32 configuration: Release WITH_LIBSODIUM: OFF # unavailable build files for VS2008 - ENABLE_CURVE: ON + ENABLE_CURVE: OFF CMAKE_GENERATOR: "Visual Studio 9 2008" MSVCVERSION: "v90" MSVCYEAR: "vs2008" @@ -111,12 +111,12 @@ environment: ARTIFACT_NAME: v141-x64 - platform: cygwin64 WITH_LIBSODIUM: OFF - ENABLE_CURVE: ON + ENABLE_CURVE: OFF CMAKE_GENERATOR: "Unix Makefiles" ARTIFACT_NAME: cygwin64 - platform: mingw64 WITH_LIBSODIUM: OFF - ENABLE_CURVE: ON + ENABLE_CURVE: OFF CMAKE_GENERATOR: "MSYS Makefiles" ARTIFACT_NAME: mingw64 - platform: Win32-uwp diff --git a/builds/android/README.md b/builds/android/README.md index 4969cb6c..43a2fa2b 100644 --- a/builds/android/README.md +++ b/builds/android/README.md @@ -93,11 +93,10 @@ do not forget to disable [Android cleanup](#android-build-cleanup). ### Cryptographic configuration -The variable CURVE accepts 3 different values: +The variable CURVE accepts 2 different values: "" : LIBZMQ is built without any encryption support. "libsodium" : LIBZMQ is built with LIBSODIUM encryption support (see below). - "tweetnacl" : LIBZMQ is build with embedded encryption support. ### Other configuration variables diff --git a/builds/android/build.sh b/builds/android/build.sh index 251754bb..de10de57 100755 --- a/builds/android/build.sh +++ b/builds/android/build.sh @@ -38,7 +38,6 @@ export CI_CONFIG_QUIET="${CI_CONFIG_QUIET:-no}" # Select CURVE implementation: # - "" # Do not use any CURVE implementation. # - "libsodium" # Use LIBSODIUM implementation. -# - "tweetnacl" # Use internal TWEETNACL implementation. export CURVE="${CURVE:-}" # By default, dependencies will be cloned to /tmp/tmp-deps. @@ -123,9 +122,6 @@ elif [ "${CURVE}" == "libsodium" ]; then android_build_library "LIBSODIUM" "${LIBSODIUM_ROOT}" ) || exit 1 } -elif [ $CURVE == "tweetnacl" ]; then - # Default - CURVE="" fi ## diff --git a/builds/cmake/platform.hpp.in b/builds/cmake/platform.hpp.in index 360e3868..a06390a0 100644 --- a/builds/cmake/platform.hpp.in +++ b/builds/cmake/platform.hpp.in @@ -75,7 +75,6 @@ #cmakedefine ZMQ_MAKE_VALGRIND_HAPPY #cmakedefine ZMQ_HAVE_CURVE -#cmakedefine ZMQ_USE_TWEETNACL #cmakedefine ZMQ_USE_LIBSODIUM #cmakedefine SODIUM_STATIC #cmakedefine ZMQ_USE_GNUTLS diff --git a/builds/deprecated-msvc/vs2010/inproc_lat/inproc_lat.vcxproj b/builds/deprecated-msvc/vs2010/inproc_lat/inproc_lat.vcxproj index 8fbb8703..f5de3210 100644 --- a/builds/deprecated-msvc/vs2010/inproc_lat/inproc_lat.vcxproj +++ b/builds/deprecated-msvc/vs2010/inproc_lat/inproc_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/inproc_thr/inproc_thr.vcxproj b/builds/deprecated-msvc/vs2010/inproc_thr/inproc_thr.vcxproj index 5d32fb83..697e6a54 100644 --- a/builds/deprecated-msvc/vs2010/inproc_thr/inproc_thr.vcxproj +++ b/builds/deprecated-msvc/vs2010/inproc_thr/inproc_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/libzmq.import.props b/builds/deprecated-msvc/vs2010/libzmq.import.props index 2f71ff84..bbdc65a5 100644 --- a/builds/deprecated-msvc/vs2010/libzmq.import.props +++ b/builds/deprecated-msvc/vs2010/libzmq.import.props @@ -15,7 +15,6 @@ - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) @@ -61,4 +60,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/libzmq.import.xml b/builds/deprecated-msvc/vs2010/libzmq.import.xml index a25a1ba9..5033b765 100644 --- a/builds/deprecated-msvc/vs2010/libzmq.import.xml +++ b/builds/deprecated-msvc/vs2010/libzmq.import.xml @@ -2,7 +2,6 @@ - @@ -11,10 +10,6 @@ - - - - @@ -46,4 +41,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/libzmq/libzmq.props b/builds/deprecated-msvc/vs2010/libzmq/libzmq.props index 22da05ab..a256275e 100644 --- a/builds/deprecated-msvc/vs2010/libzmq/libzmq.props +++ b/builds/deprecated-msvc/vs2010/libzmq/libzmq.props @@ -22,9 +22,8 @@ Use precompiled.hpp _CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) - ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) + ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions) @@ -61,7 +60,6 @@ - @@ -73,4 +71,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/libzmq/libzmq.vcxproj b/builds/deprecated-msvc/vs2010/libzmq/libzmq.vcxproj index bc07be2b..101161ac 100644 --- a/builds/deprecated-msvc/vs2010/libzmq/libzmq.vcxproj +++ b/builds/deprecated-msvc/vs2010/libzmq/libzmq.vcxproj @@ -66,9 +66,6 @@ - - true - @@ -159,7 +156,6 @@ - @@ -257,7 +253,6 @@ - NotUsing @@ -286,4 +281,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/libzmq/libzmq.vcxproj.filters b/builds/deprecated-msvc/vs2010/libzmq/libzmq.vcxproj.filters index 930b009b..93512c03 100644 --- a/builds/deprecated-msvc/vs2010/libzmq/libzmq.vcxproj.filters +++ b/builds/deprecated-msvc/vs2010/libzmq/libzmq.vcxproj.filters @@ -265,9 +265,6 @@ src - - src - @@ -573,9 +570,6 @@ src\include - - src\include - src\include @@ -624,4 +618,4 @@ resource - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/libzmq/libzmq.xml b/builds/deprecated-msvc/vs2010/libzmq/libzmq.xml index db7dfe03..9508d92e 100644 --- a/builds/deprecated-msvc/vs2010/libzmq/libzmq.xml +++ b/builds/deprecated-msvc/vs2010/libzmq/libzmq.xml @@ -2,7 +2,6 @@ - @@ -12,10 +11,6 @@ - - - - @@ -37,4 +32,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/local_lat/local_lat.vcxproj b/builds/deprecated-msvc/vs2010/local_lat/local_lat.vcxproj index 76bfb4f7..efa23365 100644 --- a/builds/deprecated-msvc/vs2010/local_lat/local_lat.vcxproj +++ b/builds/deprecated-msvc/vs2010/local_lat/local_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/local_thr/local_thr.vcxproj b/builds/deprecated-msvc/vs2010/local_thr/local_thr.vcxproj index a493408f..72d58e06 100644 --- a/builds/deprecated-msvc/vs2010/local_thr/local_thr.vcxproj +++ b/builds/deprecated-msvc/vs2010/local_thr/local_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/remote_lat/remote_lat.vcxproj b/builds/deprecated-msvc/vs2010/remote_lat/remote_lat.vcxproj index a58083f3..d1ecd2a0 100644 --- a/builds/deprecated-msvc/vs2010/remote_lat/remote_lat.vcxproj +++ b/builds/deprecated-msvc/vs2010/remote_lat/remote_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2010/remote_thr/remote_thr.vcxproj b/builds/deprecated-msvc/vs2010/remote_thr/remote_thr.vcxproj index 6724a5bb..5f59d691 100644 --- a/builds/deprecated-msvc/vs2010/remote_thr/remote_thr.vcxproj +++ b/builds/deprecated-msvc/vs2010/remote_thr/remote_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/inproc_lat/inproc_lat.vcxproj b/builds/deprecated-msvc/vs2012/inproc_lat/inproc_lat.vcxproj index 0b5a8a11..4e565248 100644 --- a/builds/deprecated-msvc/vs2012/inproc_lat/inproc_lat.vcxproj +++ b/builds/deprecated-msvc/vs2012/inproc_lat/inproc_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/inproc_thr/inproc_thr.vcxproj b/builds/deprecated-msvc/vs2012/inproc_thr/inproc_thr.vcxproj index 6a44c5c1..c3af04f0 100644 --- a/builds/deprecated-msvc/vs2012/inproc_thr/inproc_thr.vcxproj +++ b/builds/deprecated-msvc/vs2012/inproc_thr/inproc_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/libzmq.import.props b/builds/deprecated-msvc/vs2012/libzmq.import.props index 2f71ff84..bbdc65a5 100644 --- a/builds/deprecated-msvc/vs2012/libzmq.import.props +++ b/builds/deprecated-msvc/vs2012/libzmq.import.props @@ -15,7 +15,6 @@ - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) @@ -61,4 +60,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/libzmq.import.xml b/builds/deprecated-msvc/vs2012/libzmq.import.xml index a25a1ba9..5033b765 100644 --- a/builds/deprecated-msvc/vs2012/libzmq.import.xml +++ b/builds/deprecated-msvc/vs2012/libzmq.import.xml @@ -2,7 +2,6 @@ - @@ -11,10 +10,6 @@ - - - - @@ -46,4 +41,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/libzmq/libzmq.props b/builds/deprecated-msvc/vs2012/libzmq/libzmq.props index 22da05ab..a256275e 100644 --- a/builds/deprecated-msvc/vs2012/libzmq/libzmq.props +++ b/builds/deprecated-msvc/vs2012/libzmq/libzmq.props @@ -22,9 +22,8 @@ Use precompiled.hpp _CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) - ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) + ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions) @@ -61,7 +60,6 @@ - @@ -73,4 +71,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/libzmq/libzmq.vcxproj b/builds/deprecated-msvc/vs2012/libzmq/libzmq.vcxproj index cc0d84fd..95aafa1d 100644 --- a/builds/deprecated-msvc/vs2012/libzmq/libzmq.vcxproj +++ b/builds/deprecated-msvc/vs2012/libzmq/libzmq.vcxproj @@ -66,9 +66,6 @@ - - true - @@ -159,7 +156,6 @@ - @@ -257,9 +253,6 @@ - - NotUsing - @@ -286,4 +279,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/libzmq/libzmq.vcxproj.filters b/builds/deprecated-msvc/vs2012/libzmq/libzmq.vcxproj.filters index 930b009b..93512c03 100644 --- a/builds/deprecated-msvc/vs2012/libzmq/libzmq.vcxproj.filters +++ b/builds/deprecated-msvc/vs2012/libzmq/libzmq.vcxproj.filters @@ -265,9 +265,6 @@ src - - src - @@ -573,9 +570,6 @@ src\include - - src\include - src\include @@ -624,4 +618,4 @@ resource - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/libzmq/libzmq.xml b/builds/deprecated-msvc/vs2012/libzmq/libzmq.xml index db7dfe03..9508d92e 100644 --- a/builds/deprecated-msvc/vs2012/libzmq/libzmq.xml +++ b/builds/deprecated-msvc/vs2012/libzmq/libzmq.xml @@ -2,7 +2,6 @@ - @@ -12,10 +11,6 @@ - - - - @@ -37,4 +32,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/local_lat/local_lat.vcxproj b/builds/deprecated-msvc/vs2012/local_lat/local_lat.vcxproj index 03aab15b..541a1d0e 100644 --- a/builds/deprecated-msvc/vs2012/local_lat/local_lat.vcxproj +++ b/builds/deprecated-msvc/vs2012/local_lat/local_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/local_thr/local_thr.vcxproj b/builds/deprecated-msvc/vs2012/local_thr/local_thr.vcxproj index 98b1db85..688371e3 100644 --- a/builds/deprecated-msvc/vs2012/local_thr/local_thr.vcxproj +++ b/builds/deprecated-msvc/vs2012/local_thr/local_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/remote_lat/remote_lat.vcxproj b/builds/deprecated-msvc/vs2012/remote_lat/remote_lat.vcxproj index ce24b706..781e041c 100644 --- a/builds/deprecated-msvc/vs2012/remote_lat/remote_lat.vcxproj +++ b/builds/deprecated-msvc/vs2012/remote_lat/remote_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2012/remote_thr/remote_thr.vcxproj b/builds/deprecated-msvc/vs2012/remote_thr/remote_thr.vcxproj index 942e2d33..185c2337 100644 --- a/builds/deprecated-msvc/vs2012/remote_thr/remote_thr.vcxproj +++ b/builds/deprecated-msvc/vs2012/remote_thr/remote_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/inproc_lat/inproc_lat.vcxproj b/builds/deprecated-msvc/vs2013/inproc_lat/inproc_lat.vcxproj index f2809531..8ed0181b 100644 --- a/builds/deprecated-msvc/vs2013/inproc_lat/inproc_lat.vcxproj +++ b/builds/deprecated-msvc/vs2013/inproc_lat/inproc_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/inproc_thr/inproc_thr.vcxproj b/builds/deprecated-msvc/vs2013/inproc_thr/inproc_thr.vcxproj index c587b655..5402530b 100644 --- a/builds/deprecated-msvc/vs2013/inproc_thr/inproc_thr.vcxproj +++ b/builds/deprecated-msvc/vs2013/inproc_thr/inproc_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/libzmq.import.props b/builds/deprecated-msvc/vs2013/libzmq.import.props index 2f71ff84..bbdc65a5 100644 --- a/builds/deprecated-msvc/vs2013/libzmq.import.props +++ b/builds/deprecated-msvc/vs2013/libzmq.import.props @@ -15,7 +15,6 @@ - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) @@ -61,4 +60,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/libzmq.import.xml b/builds/deprecated-msvc/vs2013/libzmq.import.xml index a25a1ba9..5033b765 100644 --- a/builds/deprecated-msvc/vs2013/libzmq.import.xml +++ b/builds/deprecated-msvc/vs2013/libzmq.import.xml @@ -2,7 +2,6 @@ - @@ -11,10 +10,6 @@ - - - - @@ -46,4 +41,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/libzmq/libzmq.props b/builds/deprecated-msvc/vs2013/libzmq/libzmq.props index 22da05ab..a256275e 100644 --- a/builds/deprecated-msvc/vs2013/libzmq/libzmq.props +++ b/builds/deprecated-msvc/vs2013/libzmq/libzmq.props @@ -22,9 +22,8 @@ Use precompiled.hpp _CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) - ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) + ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions) @@ -61,7 +60,6 @@ - @@ -73,4 +71,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/libzmq/libzmq.vcxproj b/builds/deprecated-msvc/vs2013/libzmq/libzmq.vcxproj index 3d42eaa6..6d354571 100644 --- a/builds/deprecated-msvc/vs2013/libzmq/libzmq.vcxproj +++ b/builds/deprecated-msvc/vs2013/libzmq/libzmq.vcxproj @@ -66,9 +66,6 @@ - - true - @@ -159,7 +156,6 @@ - @@ -257,9 +253,6 @@ - - NotUsing - @@ -286,4 +279,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/libzmq/libzmq.vcxproj.filters b/builds/deprecated-msvc/vs2013/libzmq/libzmq.vcxproj.filters index 930b009b..93512c03 100644 --- a/builds/deprecated-msvc/vs2013/libzmq/libzmq.vcxproj.filters +++ b/builds/deprecated-msvc/vs2013/libzmq/libzmq.vcxproj.filters @@ -265,9 +265,6 @@ src - - src - @@ -573,9 +570,6 @@ src\include - - src\include - src\include @@ -624,4 +618,4 @@ resource - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/libzmq/libzmq.xml b/builds/deprecated-msvc/vs2013/libzmq/libzmq.xml index db7dfe03..9508d92e 100644 --- a/builds/deprecated-msvc/vs2013/libzmq/libzmq.xml +++ b/builds/deprecated-msvc/vs2013/libzmq/libzmq.xml @@ -2,7 +2,6 @@ - @@ -12,10 +11,6 @@ - - - - @@ -37,4 +32,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/local_lat/local_lat.vcxproj b/builds/deprecated-msvc/vs2013/local_lat/local_lat.vcxproj index 97386bcb..086f778f 100644 --- a/builds/deprecated-msvc/vs2013/local_lat/local_lat.vcxproj +++ b/builds/deprecated-msvc/vs2013/local_lat/local_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/local_thr/local_thr.vcxproj b/builds/deprecated-msvc/vs2013/local_thr/local_thr.vcxproj index ee15fa5a..54d1b163 100644 --- a/builds/deprecated-msvc/vs2013/local_thr/local_thr.vcxproj +++ b/builds/deprecated-msvc/vs2013/local_thr/local_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/remote_lat/remote_lat.vcxproj b/builds/deprecated-msvc/vs2013/remote_lat/remote_lat.vcxproj index a6f0bd63..28caa808 100644 --- a/builds/deprecated-msvc/vs2013/remote_lat/remote_lat.vcxproj +++ b/builds/deprecated-msvc/vs2013/remote_lat/remote_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2013/remote_thr/remote_thr.vcxproj b/builds/deprecated-msvc/vs2013/remote_thr/remote_thr.vcxproj index 0a53c12d..8ded91bb 100644 --- a/builds/deprecated-msvc/vs2013/remote_thr/remote_thr.vcxproj +++ b/builds/deprecated-msvc/vs2013/remote_thr/remote_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/inproc_lat/inproc_lat.vcxproj b/builds/deprecated-msvc/vs2015/inproc_lat/inproc_lat.vcxproj index d5ce1970..f2e51fde 100644 --- a/builds/deprecated-msvc/vs2015/inproc_lat/inproc_lat.vcxproj +++ b/builds/deprecated-msvc/vs2015/inproc_lat/inproc_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/inproc_thr/inproc_thr.vcxproj b/builds/deprecated-msvc/vs2015/inproc_thr/inproc_thr.vcxproj index fa3127f8..b1ecdd4e 100644 --- a/builds/deprecated-msvc/vs2015/inproc_thr/inproc_thr.vcxproj +++ b/builds/deprecated-msvc/vs2015/inproc_thr/inproc_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/libzmq.import.props b/builds/deprecated-msvc/vs2015/libzmq.import.props index 2f71ff84..bbdc65a5 100644 --- a/builds/deprecated-msvc/vs2015/libzmq.import.props +++ b/builds/deprecated-msvc/vs2015/libzmq.import.props @@ -15,7 +15,6 @@ - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) @@ -61,4 +60,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/libzmq.import.xml b/builds/deprecated-msvc/vs2015/libzmq.import.xml index a25a1ba9..5033b765 100644 --- a/builds/deprecated-msvc/vs2015/libzmq.import.xml +++ b/builds/deprecated-msvc/vs2015/libzmq.import.xml @@ -2,7 +2,6 @@ - @@ -11,10 +10,6 @@ - - - - @@ -46,4 +41,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/libzmq/libzmq.props b/builds/deprecated-msvc/vs2015/libzmq/libzmq.props index 22da05ab..a256275e 100644 --- a/builds/deprecated-msvc/vs2015/libzmq/libzmq.props +++ b/builds/deprecated-msvc/vs2015/libzmq/libzmq.props @@ -22,9 +22,8 @@ Use precompiled.hpp _CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) - ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) + ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions) @@ -61,7 +60,6 @@ - @@ -73,4 +71,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/libzmq/libzmq.vcxproj b/builds/deprecated-msvc/vs2015/libzmq/libzmq.vcxproj index 3211e8a8..734cc5e1 100644 --- a/builds/deprecated-msvc/vs2015/libzmq/libzmq.vcxproj +++ b/builds/deprecated-msvc/vs2015/libzmq/libzmq.vcxproj @@ -66,9 +66,6 @@ - - true - @@ -160,7 +157,6 @@ - @@ -259,9 +255,6 @@ - - NotUsing - @@ -288,4 +281,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/libzmq/libzmq.vcxproj.filters b/builds/deprecated-msvc/vs2015/libzmq/libzmq.vcxproj.filters index 930b009b..93512c03 100644 --- a/builds/deprecated-msvc/vs2015/libzmq/libzmq.vcxproj.filters +++ b/builds/deprecated-msvc/vs2015/libzmq/libzmq.vcxproj.filters @@ -265,9 +265,6 @@ src - - src - @@ -573,9 +570,6 @@ src\include - - src\include - src\include @@ -624,4 +618,4 @@ resource - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/libzmq/libzmq.xml b/builds/deprecated-msvc/vs2015/libzmq/libzmq.xml index db7dfe03..9508d92e 100644 --- a/builds/deprecated-msvc/vs2015/libzmq/libzmq.xml +++ b/builds/deprecated-msvc/vs2015/libzmq/libzmq.xml @@ -2,7 +2,6 @@ - @@ -12,10 +11,6 @@ - - - - @@ -37,4 +32,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/local_lat/local_lat.vcxproj b/builds/deprecated-msvc/vs2015/local_lat/local_lat.vcxproj index 4f905e63..4dbe511d 100644 --- a/builds/deprecated-msvc/vs2015/local_lat/local_lat.vcxproj +++ b/builds/deprecated-msvc/vs2015/local_lat/local_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/local_thr/local_thr.vcxproj b/builds/deprecated-msvc/vs2015/local_thr/local_thr.vcxproj index 79be83b2..3d11b45d 100644 --- a/builds/deprecated-msvc/vs2015/local_thr/local_thr.vcxproj +++ b/builds/deprecated-msvc/vs2015/local_thr/local_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/remote_lat/remote_lat.vcxproj b/builds/deprecated-msvc/vs2015/remote_lat/remote_lat.vcxproj index 98faec58..400acd22 100644 --- a/builds/deprecated-msvc/vs2015/remote_lat/remote_lat.vcxproj +++ b/builds/deprecated-msvc/vs2015/remote_lat/remote_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2015/remote_thr/remote_thr.vcxproj b/builds/deprecated-msvc/vs2015/remote_thr/remote_thr.vcxproj index d803d155..bcf25cb5 100644 --- a/builds/deprecated-msvc/vs2015/remote_thr/remote_thr.vcxproj +++ b/builds/deprecated-msvc/vs2015/remote_thr/remote_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/inproc_lat/inproc_lat.vcxproj b/builds/deprecated-msvc/vs2017/inproc_lat/inproc_lat.vcxproj index fd01a39b..17d6ba42 100644 --- a/builds/deprecated-msvc/vs2017/inproc_lat/inproc_lat.vcxproj +++ b/builds/deprecated-msvc/vs2017/inproc_lat/inproc_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/inproc_thr/inproc_thr.vcxproj b/builds/deprecated-msvc/vs2017/inproc_thr/inproc_thr.vcxproj index 5aedaf65..a98f9d9d 100644 --- a/builds/deprecated-msvc/vs2017/inproc_thr/inproc_thr.vcxproj +++ b/builds/deprecated-msvc/vs2017/inproc_thr/inproc_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/libzmq.import.props b/builds/deprecated-msvc/vs2017/libzmq.import.props index 2f71ff84..bbdc65a5 100644 --- a/builds/deprecated-msvc/vs2017/libzmq.import.props +++ b/builds/deprecated-msvc/vs2017/libzmq.import.props @@ -15,7 +15,6 @@ - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) @@ -61,4 +60,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/libzmq.import.xml b/builds/deprecated-msvc/vs2017/libzmq.import.xml index a25a1ba9..5033b765 100644 --- a/builds/deprecated-msvc/vs2017/libzmq.import.xml +++ b/builds/deprecated-msvc/vs2017/libzmq.import.xml @@ -2,7 +2,6 @@ - @@ -11,10 +10,6 @@ - - - - @@ -46,4 +41,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/libzmq/libzmq.props b/builds/deprecated-msvc/vs2017/libzmq/libzmq.props index 22da05ab..a256275e 100644 --- a/builds/deprecated-msvc/vs2017/libzmq/libzmq.props +++ b/builds/deprecated-msvc/vs2017/libzmq/libzmq.props @@ -22,9 +22,8 @@ Use precompiled.hpp _CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions) - ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) + ZMQ_HAVE_CURVE;%(PreprocessorDefinitions) ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions) HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions) ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions) @@ -61,7 +60,6 @@ - @@ -73,4 +71,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/libzmq/libzmq.vcxproj b/builds/deprecated-msvc/vs2017/libzmq/libzmq.vcxproj index 8f3eee8d..42a711ab 100644 --- a/builds/deprecated-msvc/vs2017/libzmq/libzmq.vcxproj +++ b/builds/deprecated-msvc/vs2017/libzmq/libzmq.vcxproj @@ -66,9 +66,6 @@ - - true - @@ -159,7 +156,6 @@ - @@ -257,9 +253,6 @@ - - NotUsing - @@ -286,4 +279,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/libzmq/libzmq.vcxproj.filters b/builds/deprecated-msvc/vs2017/libzmq/libzmq.vcxproj.filters index 930b009b..93512c03 100644 --- a/builds/deprecated-msvc/vs2017/libzmq/libzmq.vcxproj.filters +++ b/builds/deprecated-msvc/vs2017/libzmq/libzmq.vcxproj.filters @@ -265,9 +265,6 @@ src - - src - @@ -573,9 +570,6 @@ src\include - - src\include - src\include @@ -624,4 +618,4 @@ resource - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/libzmq/libzmq.xml b/builds/deprecated-msvc/vs2017/libzmq/libzmq.xml index db7dfe03..9508d92e 100644 --- a/builds/deprecated-msvc/vs2017/libzmq/libzmq.xml +++ b/builds/deprecated-msvc/vs2017/libzmq/libzmq.xml @@ -2,7 +2,6 @@ - @@ -12,10 +11,6 @@ - - - - @@ -37,4 +32,4 @@ - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/local_lat/local_lat.vcxproj b/builds/deprecated-msvc/vs2017/local_lat/local_lat.vcxproj index 4e54ed15..1eee2089 100644 --- a/builds/deprecated-msvc/vs2017/local_lat/local_lat.vcxproj +++ b/builds/deprecated-msvc/vs2017/local_lat/local_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/local_thr/local_thr.vcxproj b/builds/deprecated-msvc/vs2017/local_thr/local_thr.vcxproj index 2b3d6de4..a1d122d6 100644 --- a/builds/deprecated-msvc/vs2017/local_thr/local_thr.vcxproj +++ b/builds/deprecated-msvc/vs2017/local_thr/local_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/remote_lat/remote_lat.vcxproj b/builds/deprecated-msvc/vs2017/remote_lat/remote_lat.vcxproj index 668410cd..52549d6f 100644 --- a/builds/deprecated-msvc/vs2017/remote_lat/remote_lat.vcxproj +++ b/builds/deprecated-msvc/vs2017/remote_lat/remote_lat.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/deprecated-msvc/vs2017/remote_thr/remote_thr.vcxproj b/builds/deprecated-msvc/vs2017/remote_thr/remote_thr.vcxproj index 2e7d072f..1671b793 100644 --- a/builds/deprecated-msvc/vs2017/remote_thr/remote_thr.vcxproj +++ b/builds/deprecated-msvc/vs2017/remote_thr/remote_thr.vcxproj @@ -63,9 +63,6 @@ - - true - @@ -79,4 +76,4 @@ false - \ No newline at end of file + diff --git a/builds/gyp/platform.hpp b/builds/gyp/platform.hpp index c463ca19..f0c3c688 100644 --- a/builds/gyp/platform.hpp +++ b/builds/gyp/platform.hpp @@ -40,7 +40,6 @@ // Set for all platforms #define ZMQ_HAVE_CURVE 1 -#define ZMQ_USE_TWEETNACL 1 #if defined ZMQ_HAVE_WINDOWS # define ZMQ_USE_SELECT 1 diff --git a/builds/gyp/project.gyp b/builds/gyp/project.gyp index f06100e9..609cea63 100644 --- a/builds/gyp/project.gyp +++ b/builds/gyp/project.gyp @@ -245,8 +245,6 @@ '../../src/tipc_listener.hpp', '../../src/trie.cpp', '../../src/trie.hpp', - '../../src/tweetnacl.c', - '../../src/tweetnacl.h', '../../src/udp_address.cpp', '../../src/udp_address.hpp', '../../src/udp_engine.cpp', diff --git a/configure.ac b/configure.ac index 77f01142..622f544d 100644 --- a/configure.ac +++ b/configure.ac @@ -558,12 +558,12 @@ if test "x$have_gssapi_library" = "xyes"; then fi AM_CONDITIONAL(BUILD_GSSAPI, test "x$have_gssapi_library" = "xyes") -# Select curve encryption library, defaults to tweetnacl +# Select curve encryption library, defaults to disabled # To use libsodium instead, use --with-libsodium (must be installed) # To disable curve, use --disable-curve AC_ARG_WITH([libsodium], - [AS_HELP_STRING([--with-libsodium], [use libsodium instead of built-in tweetnacl [default=no]])]) + [AS_HELP_STRING([--with-libsodium], [use libsodium [default=no]])]) AS_IF([test "x$with_libsodium" = "xyes"], [ PKG_CHECK_MODULES([sodium], [libsodium], [libsodium_found=yes], [ @@ -620,18 +620,11 @@ elif test "x$with_libsodium" = "xyes"; then esac PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE libsodium" -else - AC_MSG_NOTICE([Using tweetnacl for CURVE security]) - AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption]) - AC_DEFINE(ZMQ_USE_TWEETNACL, [1], [Using tweetnacl for curve encryption]) - curve_library="tweetnacl" - enable_curve="yes" fi AM_CONDITIONAL(ENABLE_CURVE_KEYGEN, test "x$enable_curve" = "xyes" -a "x$zmq_enable_curve_keygen" = "xyes") AM_CONDITIONAL(USE_LIBSODIUM, test "$curve_library" = "libsodium") -AM_CONDITIONAL(USE_TWEETNACL, test "$curve_library" = "tweetnacl") AM_CONDITIONAL(HAVE_CURVE, test "x$curve_library" != "x") AM_CONDITIONAL(USE_WEPOLL, test "$poller" = "wepoll") diff --git a/include/zmq.h b/include/zmq.h index 3186cd65..878fc0e9 100644 --- a/include/zmq.h +++ b/include/zmq.h @@ -566,7 +566,7 @@ zmq_z85_encode (char *dest_, const uint8_t *data_, size_t size_); /* Decode data with Z85 encoding. Returns decoded data */ ZMQ_EXPORT uint8_t *zmq_z85_decode (uint8_t *dest_, const char *string_); -/* Generate z85-encoded public and private keypair with tweetnacl/libsodium. */ +/* Generate z85-encoded public and private keypair with libsodium. */ /* Returns 0 on success. */ ZMQ_EXPORT int zmq_curve_keypair (char *z85_public_key_, char *z85_secret_key_); diff --git a/packaging/nuget/package.gsl b/packaging/nuget/package.gsl index c0c3db49..784e528f 100644 --- a/packaging/nuget/package.gsl +++ b/packaging/nuget/package.gsl @@ -25,7 +25,7 @@ true false The 0MQ lightweight messaging kernel is a library which extends the standard socket interfaces with features traditionally provided by specialised messaging middleware products. 0MQ sockets provide an abstraction of asynchronous message queues, multiple messaging patterns, message filtering (subscriptions), seamless access to multiple transport protocols and more. - The 0MQ lightweight messaging kernel, with tweetnacl integrated, packaged for specific Visual Studio compiler. + The 0MQ lightweight messaging kernel, packaged for specific Visual Studio compiler. https://raw.github.com/zeromq/libzmq/master/NEWS GNU Lesser GPL v3 native, libzmq, zmq, 0MQ, messaging, sockets, C++ @@ -125,8 +125,6 @@ - - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) $\(MSBuildThisFileDirectory)include\\;%(AdditionalIncludeDirectories) @@ -261,4 +259,4 @@ - \ No newline at end of file + diff --git a/packaging/nuget/package.nuspec b/packaging/nuget/package.nuspec index d1b2e280..a209dddf 100644 --- a/packaging/nuget/package.nuspec +++ b/packaging/nuget/package.nuspec @@ -17,7 +17,7 @@ true false The 0MQ lightweight messaging kernel is a library which extends the standard socket interfaces with features traditionally provided by specialised messaging middleware products. 0MQ sockets provide an abstraction of asynchronous message queues, multiple messaging patterns, message filtering (subscriptions), seamless access to multiple transport protocols and more. - The 0MQ lightweight messaging kernel, with tweetnacl integrated, packaged for specific Visual Studio compiler. + The 0MQ lightweight messaging kernel, packaged for specific Visual Studio compiler. https://raw.github.com/zeromq/libzmq/master/NEWS GNU Lesser GPL v3 native, libzmq, zmq, 0MQ, messaging, sockets, C++ diff --git a/packaging/nuget/package.targets b/packaging/nuget/package.targets index 57813a71..dbc5d3ac 100644 --- a/packaging/nuget/package.targets +++ b/packaging/nuget/package.targets @@ -14,8 +14,6 @@ - - ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions) $(MSBuildThisFileDirectory)include\;%(AdditionalIncludeDirectories) diff --git a/src/curve_client_tools.hpp b/src/curve_client_tools.hpp index 7e0d25b3..6785f648 100644 --- a/src/curve_client_tools.hpp +++ b/src/curve_client_tools.hpp @@ -32,9 +32,7 @@ #ifdef ZMQ_HAVE_CURVE -#if defined(ZMQ_USE_TWEETNACL) -#include "tweetnacl.h" -#elif defined(ZMQ_USE_LIBSODIUM) +#if defined(ZMQ_USE_LIBSODIUM) #include "sodium.h" #endif diff --git a/src/curve_mechanism_base.hpp b/src/curve_mechanism_base.hpp index a72965e9..7f7a1ae4 100644 --- a/src/curve_mechanism_base.hpp +++ b/src/curve_mechanism_base.hpp @@ -32,9 +32,7 @@ #ifdef ZMQ_HAVE_CURVE -#if defined(ZMQ_USE_TWEETNACL) -#include "tweetnacl.h" -#elif defined(ZMQ_USE_LIBSODIUM) +#if defined(ZMQ_USE_LIBSODIUM) #include "sodium.h" #endif diff --git a/src/random.cpp b/src/random.cpp index 4700aa58..ae9e98f5 100644 --- a/src/random.cpp +++ b/src/random.cpp @@ -40,9 +40,7 @@ #include "mutex.hpp" #include "macros.hpp" -#if defined(ZMQ_USE_TWEETNACL) -#include "tweetnacl.h" -#elif defined(ZMQ_USE_LIBSODIUM) +#if defined(ZMQ_USE_LIBSODIUM) #include "sodium.h" #endif @@ -65,90 +63,11 @@ uint32_t zmq::generate_random () return high | low; } -// When different threads have their own context the file descriptor -// variable is shared and is subject to race conditions in tweetnacl, -// that lead to file descriptors leaks. In long-running programs with -// ephemeral threads this is a problem as it accumulates. -// thread-local storage cannot be used to initialise the file descriptor -// as it is perfectly legal to share a context among many threads, each -// of which might call curve APIs. -// Also libsodium documentation specifically states that sodium_init -// must not be called concurrently from multiple threads, for the -// same reason. Inspecting the code also reveals that the close API is -// not thread safe. -// The context class cannot be used with static variables as the curve -// utility APIs like zmq_curve_keypair also call into the crypto -// library. -// The safest solution for all use cases therefore is to have a -// static lock to serialize calls into an initialiser and a finaliser, -// using refcounts to make sure that a thread does not close the library -// while another is still using it. To avoid the static initialization -// order fiasco, this is done using function-local statics, if the -// compiler implementation supports thread-safe initialization of those. -// Otherwise, we fall back to global statics. -// HOWEVER, this initialisation code imposes ordering constraints, which -// are not obvious to users of libzmq, and may lead to problems if atexit -// or similar methods are used for cleanup. -// In that case, a strict ordering is imposed whereas the contexts MUST -// be initialised BEFORE registering the cleanup with atexit. CZMQ is an -// example. Hence we make the choice to restrict this global transition -// mechanism ONLY to Tweenacl + *NIX (when using /dev/urandom) as it is -// the less risky option. - -// TODO if there is some other user of libsodium besides libzmq, this must -// be synchronized by the application. This should probably also be -// configurable via config.h - -// TODO this should probably be done via config.h -#if __cplusplus >= 201103L \ - || (defined(__cpp_threadsafe_static_init) \ - && __cpp_threadsafe_static_init >= 200806) \ - || (defined(_MSC_VER) && _MSC_VER >= 1900) -#define ZMQ_HAVE_THREADSAFE_STATIC_LOCAL_INIT 1 -// TODO this might probably also be set if a sufficiently recent gcc is used -// without -fno-threadsafe-statics, but this cannot be determined at -// compile-time, so it must be set via config.h -#else -#define ZMQ_HAVE_THREADSAFE_STATIC_LOCAL_INIT 0 -#endif - -#if !ZMQ_HAVE_THREADSAFE_STATIC_LOCAL_INIT \ - && (defined(ZMQ_USE_TWEETNACL) && !defined(ZMQ_HAVE_WINDOWS) \ - && !defined(ZMQ_HAVE_GETRANDOM)) -static unsigned int random_refcount = 0; -static zmq::mutex_t random_sync; -#endif - static void manage_random (bool init_) { -#if defined(ZMQ_USE_TWEETNACL) && !defined(ZMQ_HAVE_WINDOWS) \ - && !defined(ZMQ_HAVE_GETRANDOM) - -#if ZMQ_HAVE_THREADSAFE_STATIC_LOCAL_INIT - static int random_refcount = 0; - static zmq::mutex_t random_sync; -#endif - - if (init_) { - zmq::scoped_lock_t locker (random_sync); - - if (random_refcount == 0) { - int rc = sodium_init (); - zmq_assert (rc != -1); - } - - ++random_refcount; - } else { - zmq::scoped_lock_t locker (random_sync); - --random_refcount; - - if (random_refcount == 0) { - randombytes_close (); - } - } - -#elif defined(ZMQ_USE_LIBSODIUM) +#if defined(ZMQ_USE_LIBSODIUM) if (init_) { + // sodium_init() is now documented as thread-safe in recent versions int rc = sodium_init (); zmq_assert (rc != -1); #if defined(ZMQ_LIBSODIUM_RANDOMBYTES_CLOSE) diff --git a/src/tweetnacl.c b/src/tweetnacl.c deleted file mode 100644 index 6e6f657c..00000000 --- a/src/tweetnacl.c +++ /dev/null @@ -1,993 +0,0 @@ -/* - Copyright (c) 2016-2017 Contributors as noted in the AUTHORS file - - This file is part of libzmq, the ZeroMQ core engine in C++. - - libzmq is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License (LGPL) as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - As a special exception, the Contributors give you permission to link - this library with independent modules to produce an executable, - regardless of the license terms of these independent modules, and to - copy and distribute the resulting executable under terms of your choice, - provided that you also meet, for each linked independent module, the - terms and conditions of the license of that module. An independent - module is a module which is not derived from or based on this library. - If you modify this library, you must extend this exception to your - version of the library. - - libzmq is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . -*/ - -/* - The precompiled header is not used for c files so this is required here. -*/ -#include "platform.hpp" - -#if defined(ZMQ_USE_TWEETNACL) - -/* - Disable warnings for this source only, rather than for the whole - codebase when building with C99 (gcc >= 4.2) or with Microsoft's compiler -*/ -#if defined __GNUC__ \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)) \ - && __STDC_VERSION__ < 201112L -#pragma GCC diagnostic ignored "-Wsign-compare" -#elif defined _MSC_VER -#pragma warning(disable : 4018 4244 4146) -#endif - -/* clang-format off */ - -#include "tweetnacl.h" - -#define FOR(i,n) for (i = 0;i < n;++i) -#define sv static void - -static const u8 - _0[16], - _9[32] = {9}; -static const gf - gf0, - gf1 = {1}, - _121665 = {0xDB41,1}, - D = {0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203}, - D2 = {0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406}, - X = {0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169}, - Y = {0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666}, - I = {0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83}; - -static u32 L32(u32 x,int c) { return (x << c) | ((x&0xffffffff) >> (32 - c)); } - -static u32 ld32(const u8 *x) -{ - u32 u = x[3]; - u = (u<<8)|x[2]; - u = (u<<8)|x[1]; - return (u<<8)|x[0]; -} - -static u64 dl64(const u8 *x) -{ - u64 i,u=0; - FOR(i,8) u=(u<<8)|x[i]; - return u; -} - -sv st32(u8 *x,u32 u) -{ - int i; - FOR(i,4) { x[i] = u; u >>= 8; } -} - -sv ts64(u8 *x,u64 u) -{ - int i; - for (i = 7;i >= 0;--i) { x[i] = u; u >>= 8; } -} - -static int vn(const u8 *x,const u8 *y,int n) -{ - u32 i,d = 0; - FOR(i,n) d |= x[i]^y[i]; - return (1 & ((d - 1) >> 8)) - 1; -} - -int crypto_verify_16(const u8 *x,const u8 *y) -{ - return vn(x,y,16); -} - -int crypto_verify_32(const u8 *x,const u8 *y) -{ - return vn(x,y,32); -} - -sv core(u8 *out,const u8 *in,const u8 *k,const u8 *c,int h) -{ - u32 w[16],x[16],y[16],t[4]; - int i,j,m; - - FOR(i,4) { - x[5*i] = ld32(c+4*i); - x[1+i] = ld32(k+4*i); - x[6+i] = ld32(in+4*i); - x[11+i] = ld32(k+16+4*i); - } - - FOR(i,16) y[i] = x[i]; - - FOR(i,20) { - FOR(j,4) { - FOR(m,4) t[m] = x[(5*j+4*m)%16]; - t[1] ^= L32(t[0]+t[3], 7); - t[2] ^= L32(t[1]+t[0], 9); - t[3] ^= L32(t[2]+t[1],13); - t[0] ^= L32(t[3]+t[2],18); - FOR(m,4) w[4*j+(j+m)%4] = t[m]; - } - FOR(m,16) x[m] = w[m]; - } - - if (h) { - FOR(i,16) x[i] += y[i]; - FOR(i,4) { - x[5*i] -= ld32(c+4*i); - x[6+i] -= ld32(in+4*i); - } - FOR(i,4) { - st32(out+4*i,x[5*i]); - st32(out+16+4*i,x[6+i]); - } - } else - FOR(i,16) st32(out + 4 * i,x[i] + y[i]); -} - -int crypto_core_salsa20(u8 *out,const u8 *in,const u8 *k,const u8 *c) -{ - core(out,in,k,c,0); - return 0; -} - -int crypto_core_hsalsa20(u8 *out,const u8 *in,const u8 *k,const u8 *c) -{ - core(out,in,k,c,1); - return 0; -} - -static const u8 sigma[16] = "expand 32-byte k"; - -int crypto_stream_salsa20_xor(u8 *c,const u8 *m,u64 b,const u8 *n,const u8 *k) -{ - u8 z[16],x[64]; - u32 u,i; - if (!b) return 0; - FOR(i,16) z[i] = 0; - FOR(i,8) z[i] = n[i]; - while (b >= 64) { - crypto_core_salsa20(x,z,k,sigma); - FOR(i,64) c[i] = (m?m[i]:0) ^ x[i]; - u = 1; - for (i = 8;i < 16;++i) { - u += (u32) z[i]; - z[i] = u; - u >>= 8; - } - b -= 64; - c += 64; - if (m) m += 64; - } - if (b) { - crypto_core_salsa20(x,z,k,sigma); - FOR(i,b) c[i] = (m?m[i]:0) ^ x[i]; - } - return 0; -} - -int crypto_stream_salsa20(u8 *c,u64 d,const u8 *n,const u8 *k) -{ - return crypto_stream_salsa20_xor(c,0,d,n,k); -} - -int crypto_stream(u8 *c,u64 d,const u8 *n,const u8 *k) -{ - u8 s[32]; - crypto_core_hsalsa20(s,n,k,sigma); - return crypto_stream_salsa20(c,d,n+16,s); -} - -int crypto_stream_xor(u8 *c,const u8 *m,u64 d,const u8 *n,const u8 *k) -{ - u8 s[32]; - crypto_core_hsalsa20(s,n,k,sigma); - return crypto_stream_salsa20_xor(c,m,d,n+16,s); -} - -sv add1305(u32 *h,const u32 *c) -{ - u32 j,u = 0; - FOR(j,17) { - u += h[j] + c[j]; - h[j] = u & 255; - u >>= 8; - } -} - -static const u32 minusp[17] = { - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 -} ; - -int crypto_onetimeauth(u8 *out,const u8 *m,u64 n,const u8 *k) -{ - u32 s,i,j,u,x[17],r[17],h[17],c[17],g[17]; - - FOR(j,17) r[j]=h[j]=0; - FOR(j,16) r[j]=k[j]; - r[3]&=15; - r[4]&=252; - r[7]&=15; - r[8]&=252; - r[11]&=15; - r[12]&=252; - r[15]&=15; - - while (n > 0) { - FOR(j,17) c[j] = 0; - for (j = 0;(j < 16) && (j < n);++j) c[j] = m[j]; - c[j] = 1; - m += j; n -= j; - add1305(h,c); - FOR(i,17) { - x[i] = 0; - FOR(j,17) x[i] += h[j] * ((j <= i) ? r[i - j] : 320 * r[i + 17 - j]); - } - FOR(i,17) h[i] = x[i]; - u = 0; - FOR(j,16) { - u += h[j]; - h[j] = u & 255; - u >>= 8; - } - u += h[16]; h[16] = u & 3; - u = 5 * (u >> 2); - FOR(j,16) { - u += h[j]; - h[j] = u & 255; - u >>= 8; - } - u += h[16]; h[16] = u; - } - - FOR(j,17) g[j] = h[j]; - add1305(h,minusp); - s = -(h[16] >> 7); - FOR(j,17) h[j] ^= s & (g[j] ^ h[j]); - - FOR(j,16) c[j] = k[j + 16]; - c[16] = 0; - add1305(h,c); - FOR(j,16) out[j] = h[j]; - return 0; -} - -int crypto_onetimeauth_verify(const u8 *h,const u8 *m,u64 n,const u8 *k) -{ - u8 x[16]; - crypto_onetimeauth(x,m,n,k); - return crypto_verify_16(h,x); -} - -int crypto_secretbox(u8 *c,const u8 *m,u64 d,const u8 *n,const u8 *k) -{ - int i; - if (d < 32) return -1; - crypto_stream_xor(c,m,d,n,k); - crypto_onetimeauth(c + 16,c + 32,d - 32,c); - FOR(i,16) c[i] = 0; - return 0; -} - -int crypto_secretbox_open(u8 *m,const u8 *c,u64 d,const u8 *n,const u8 *k) -{ - int i; - u8 x[32]; - if (d < 32) return -1; - crypto_stream(x,32,n,k); - if (crypto_onetimeauth_verify(c + 16,c + 32,d - 32,x) != 0) return -1; - crypto_stream_xor(m,c,d,n,k); - FOR(i,32) m[i] = 0; - return 0; -} - -sv set25519(gf r, const gf a) -{ - int i; - FOR(i,16) r[i]=a[i]; -} - -sv car25519(gf o) -{ - int i; - i64 c; - FOR(i,16) { - o[i]+=(1LL<<16); - c=o[i]>>16; - o[(i+1)*(i<15)]+=c-1+37*(c-1)*(i==15); - o[i]-=c<<16; - } -} - -sv sel25519(gf p,gf q,int b) -{ - i64 t,i,c=~(b-1); - FOR(i,16) { - t= c&(p[i]^q[i]); - p[i]^=t; - q[i]^=t; - } -} - -sv pack25519(u8 *o,const gf n) -{ - int i,j,b; - gf m,t; - FOR(i,16) t[i]=n[i]; - car25519(t); - car25519(t); - car25519(t); - FOR(j,2) { - m[0]=t[0]-0xffed; - for(i=1;i<15;i++) { - m[i]=t[i]-0xffff-((m[i-1]>>16)&1); - m[i-1]&=0xffff; - } - m[15]=t[15]-0x7fff-((m[14]>>16)&1); - b=(m[15]>>16)&1; - m[14]&=0xffff; - sel25519(t,m,1-b); - } - FOR(i,16) { - o[2*i]=t[i]&0xff; - o[2*i+1]=t[i]>>8; - } -} - -static int neq25519(const gf a, const gf b) -{ - u8 c[32],d[32]; - pack25519(c,a); - pack25519(d,b); - return crypto_verify_32(c,d); -} - -static u8 par25519(const gf a) -{ - u8 d[32]; - pack25519(d,a); - return d[0]&1; -} - -sv unpack25519(gf o, const u8 *n) -{ - int i; - FOR(i,16) o[i]=n[2*i]+((i64)n[2*i+1]<<8); - o[15]&=0x7fff; -} - -sv A(gf o,const gf a,const gf b) -{ - int i; - FOR(i,16) o[i]=a[i]+b[i]; -} - -sv Z(gf o,const gf a,const gf b) -{ - int i; - FOR(i,16) o[i]=a[i]-b[i]; -} - -sv M(gf o,const gf a,const gf b) -{ - i64 i,j,t[31]; - FOR(i,31) t[i]=0; - FOR(i,16) FOR(j,16) t[i+j]+=a[i]*b[j]; - FOR(i,15) t[i]+=38*t[i+16]; - FOR(i,16) o[i]=t[i]; - car25519(o); - car25519(o); -} - -sv S(gf o,const gf a) -{ - M(o,a,a); -} - -sv inv25519(gf o,const gf i) -{ - gf c; - int a; - FOR(a,16) c[a]=i[a]; - for(a=253;a>=0;a--) { - S(c,c); - if(a!=2&&a!=4) M(c,c,i); - } - FOR(a,16) o[a]=c[a]; -} - -sv pow2523(gf o,const gf i) -{ - gf c; - int a; - FOR(a,16) c[a]=i[a]; - for(a=250;a>=0;a--) { - S(c,c); - if(a!=1) M(c,c,i); - } - FOR(a,16) o[a]=c[a]; -} - -int crypto_scalarmult(u8 *q,const u8 *n,const u8 *p) -{ - u8 z[32]; - i64 x[80],r,i; - gf a,b,c,d,e,f; - FOR(i,31) z[i]=n[i]; - z[31]=(n[31]&127)|64; - z[0]&=248; - unpack25519(x,p); - FOR(i,16) { - b[i]=x[i]; - d[i]=a[i]=c[i]=0; - } - a[0]=d[0]=1; - for(i=254;i>=0;--i) { - r=(z[i>>3]>>(i&7))&1; - sel25519(a,b,r); - sel25519(c,d,r); - A(e,a,c); - Z(a,a,c); - A(c,b,d); - Z(b,b,d); - S(d,e); - S(f,a); - M(a,c,a); - M(c,b,e); - A(e,a,c); - Z(a,a,c); - S(b,a); - Z(c,d,f); - M(a,c,_121665); - A(a,a,d); - M(c,c,a); - M(a,d,f); - M(d,b,x); - S(b,e); - sel25519(a,b,r); - sel25519(c,d,r); - } - FOR(i,16) { - x[i+16]=a[i]; - x[i+32]=c[i]; - x[i+48]=b[i]; - x[i+64]=d[i]; - } - inv25519(x+32,x+32); - M(x+16,x+16,x+32); - pack25519(q,x+16); - return 0; -} - -int crypto_scalarmult_base(u8 *q,const u8 *n) -{ - return crypto_scalarmult(q,n,_9); -} - -int crypto_box_keypair(u8 *y,u8 *x) -{ - randombytes(x,32); - return crypto_scalarmult_base(y,x); -} - -int crypto_box_beforenm(u8 *k,const u8 *y,const u8 *x) -{ - u8 s[32]; - crypto_scalarmult(s,x,y); - return crypto_core_hsalsa20(k,_0,s,sigma); -} - -int crypto_box_afternm(u8 *c,const u8 *m,u64 d,const u8 *n,const u8 *k) -{ - return crypto_secretbox(c,m,d,n,k); -} - -int crypto_box_open_afternm(u8 *m,const u8 *c,u64 d,const u8 *n,const u8 *k) -{ - return crypto_secretbox_open(m,c,d,n,k); -} - -int crypto_box(u8 *c,const u8 *m,u64 d,const u8 *n,const u8 *y,const u8 *x) -{ - u8 k[32]; - crypto_box_beforenm(k,y,x); - return crypto_box_afternm(c,m,d,n,k); -} - -int crypto_box_open(u8 *m,const u8 *c,u64 d,const u8 *n,const u8 *y,const u8 *x) -{ - u8 k[32]; - crypto_box_beforenm(k,y,x); - return crypto_box_open_afternm(m,c,d,n,k); -} - -static u64 R(u64 x,int c) { return (x >> c) | (x << (64 - c)); } -static u64 Ch(u64 x,u64 y,u64 z) { return (x & y) ^ (~x & z); } -static u64 Maj(u64 x,u64 y,u64 z) { return (x & y) ^ (x & z) ^ (y & z); } -static u64 Sigma0(u64 x) { return R(x,28) ^ R(x,34) ^ R(x,39); } -static u64 Sigma1(u64 x) { return R(x,14) ^ R(x,18) ^ R(x,41); } -static u64 sigma0(u64 x) { return R(x, 1) ^ R(x, 8) ^ (x >> 7); } -static u64 sigma1(u64 x) { return R(x,19) ^ R(x,61) ^ (x >> 6); } - -static const u64 K[80] = -{ - 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, - 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, - 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, - 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, - 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, - 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, - 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, - 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, - 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, - 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, - 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, - 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, - 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, - 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, - 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, - 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, - 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, - 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, - 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, - 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL -}; - -int crypto_hashblocks(u8 *x,const u8 *m,u64 n) -{ - u64 z[8],b[8],a[8],w[16],t; - int i,j; - - FOR(i,8) z[i] = a[i] = dl64(x + 8 * i); - - while (n >= 128) { - FOR(i,16) w[i] = dl64(m + 8 * i); - - FOR(i,80) { - FOR(j,8) b[j] = a[j]; - t = a[7] + Sigma1(a[4]) + Ch(a[4],a[5],a[6]) + K[i] + w[i%16]; - b[7] = t + Sigma0(a[0]) + Maj(a[0],a[1],a[2]); - b[3] += t; - FOR(j,8) a[(j+1)%8] = b[j]; - if (i%16 == 15) - FOR(j,16) - w[j] += w[(j+9)%16] + sigma0(w[(j+1)%16]) + sigma1(w[(j+14)%16]); - } - - FOR(i,8) { a[i] += z[i]; z[i] = a[i]; } - - m += 128; - n -= 128; - } - - FOR(i,8) ts64(x+8*i,z[i]); - - return n; -} - -static const u8 iv[64] = { - 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, - 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, - 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b, - 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1, - 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1, - 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f, - 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b, - 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79 -} ; - -int crypto_hash(u8 *out,const u8 *m,u64 n) -{ - u8 h[64],x[256]; - u64 i,b = n; - - FOR(i,64) h[i] = iv[i]; - - crypto_hashblocks(h,m,n); - m += n; - n &= 127; - m -= n; - - FOR(i,256) x[i] = 0; - FOR(i,n) x[i] = m[i]; - x[n] = 128; - - n = 256-128*(n<112); - x[n-9] = b >> 61; - ts64(x+n-8,b<<3); - crypto_hashblocks(h,x,n); - - FOR(i,64) out[i] = h[i]; - - return 0; -} - -sv add(gf p[4],gf q[4]) -{ - gf a,b,c,d,t,e,f,g,h; - - Z(a, p[1], p[0]); - Z(t, q[1], q[0]); - M(a, a, t); - A(b, p[0], p[1]); - A(t, q[0], q[1]); - M(b, b, t); - M(c, p[3], q[3]); - M(c, c, D2); - M(d, p[2], q[2]); - A(d, d, d); - Z(e, b, a); - Z(f, d, c); - A(g, d, c); - A(h, b, a); - - M(p[0], e, f); - M(p[1], h, g); - M(p[2], g, f); - M(p[3], e, h); -} - -sv cswap(gf p[4],gf q[4],u8 b) -{ - int i; - FOR(i,4) - sel25519(p[i],q[i],b); -} - -sv pack(u8 *r,gf p[4]) -{ - gf tx, ty, zi; - inv25519(zi, p[2]); - M(tx, p[0], zi); - M(ty, p[1], zi); - pack25519(r, ty); - r[31] ^= par25519(tx) << 7; -} - -sv scalarmult(gf p[4],gf q[4],const u8 *s) -{ - int i; - set25519(p[0],gf0); - set25519(p[1],gf1); - set25519(p[2],gf1); - set25519(p[3],gf0); - for (i = 255;i >= 0;--i) { - const u8 b = (s[i/8]>>(i&7))&1; - cswap(p,q,b); - add(q,p); - add(p,p); - cswap(p,q,b); - } -} - -sv scalarbase(gf p[4],const u8 *s) -{ - gf q[4]; - set25519(q[0],X); - set25519(q[1],Y); - set25519(q[2],gf1); - M(q[3],X,Y); - scalarmult(p,q,s); -} - -int crypto_sign_keypair(u8 *pk, u8 *sk) -{ - u8 d[64]; - gf p[4]; - int i; - - randombytes(sk, 32); - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - scalarbase(p,d); - pack(pk,p); - - FOR(i,32) sk[32 + i] = pk[i]; - return 0; -} - -static const u64 L[32] = {0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10}; - -sv modL(u8 *r,i64 x[64]) -{ - i64 carry,i,j; - for (i = 63;i >= 32;--i) { - carry = 0; - for (j = i - 32;j < i - 12;++j) { - x[j] += carry - 16 * x[i] * L[j - (i - 32)]; - carry = (x[j] + 128) >> 8; - x[j] -= carry << 8; - } - x[j] += carry; - x[i] = 0; - } - carry = 0; - FOR(j,32) { - x[j] += carry - (x[31] >> 4) * L[j]; - carry = x[j] >> 8; - x[j] &= 255; - } - FOR(j,32) x[j] -= carry * L[j]; - FOR(i,32) { - x[i+1] += x[i] >> 8; - r[i] = x[i] & 255; - } -} - -sv reduce(u8 *r) -{ - i64 x[64],i; - FOR(i,64) x[i] = (u64) r[i]; - FOR(i,64) r[i] = 0; - modL(r,x); -} - -int crypto_sign(u8 *sm,u64 *smlen,const u8 *m,u64 n,const u8 *sk) -{ - u8 d[64],h[64],r[64]; - i64 i,j,x[64]; - gf p[4]; - - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - *smlen = n+64; - FOR(i,n) sm[64 + i] = m[i]; - FOR(i,32) sm[32 + i] = d[32 + i]; - - crypto_hash(r, sm+32, n+32); - reduce(r); - scalarbase(p,r); - pack(sm,p); - - FOR(i,32) sm[i+32] = sk[i+32]; - crypto_hash(h,sm,n + 64); - reduce(h); - - FOR(i,64) x[i] = 0; - FOR(i,32) x[i] = (u64) r[i]; - FOR(i,32) FOR(j,32) x[i+j] += h[i] * (u64) d[j]; - modL(sm + 32,x); - - return 0; -} - -static int unpackneg(gf r[4],const u8 p[32]) -{ - gf t, chk, num, den, den2, den4, den6; - set25519(r[2],gf1); - unpack25519(r[1],p); - S(num,r[1]); - M(den,num,D); - Z(num,num,r[2]); - A(den,r[2],den); - - S(den2,den); - S(den4,den2); - M(den6,den4,den2); - M(t,den6,num); - M(t,t,den); - - pow2523(t,t); - M(t,t,num); - M(t,t,den); - M(t,t,den); - M(r[0],t,den); - - S(chk,r[0]); - M(chk,chk,den); - if (neq25519(chk, num)) M(r[0],r[0],I); - - S(chk,r[0]); - M(chk,chk,den); - if (neq25519(chk, num)) return -1; - - if (par25519(r[0]) == (p[31]>>7)) Z(r[0],gf0,r[0]); - - M(r[3],r[0],r[1]); - return 0; -} - -int crypto_sign_open(u8 *m,u64 *mlen,const u8 *sm,u64 n,const u8 *pk) -{ - int i; - u8 t[32],h[64]; - gf p[4],q[4]; - - *mlen = -1; - if (n < 64) return -1; - - if (unpackneg(q,pk)) return -1; - - FOR(i,n) m[i] = sm[i]; - FOR(i,32) m[i+32] = pk[i]; - crypto_hash(h,m,n); - reduce(h); - scalarmult(p,q,h); - - scalarbase(q,sm + 32); - add(p,q); - pack(t,p); - - n -= 64; - if (crypto_verify_32(sm, t)) { - FOR(i,n) m[i] = 0; - return -1; - } - - FOR(i,n) m[i] = sm[i + 64]; - *mlen = n; - return 0; -} - - -#ifdef ZMQ_HAVE_WINDOWS - -#include -#include - -#define NCP ((HCRYPTPROV) 0) - -HCRYPTPROV hProvider = NCP; - -void randombytes(unsigned char *x,unsigned long long xlen) -{ - unsigned i; - BOOL ret; - - if (hProvider == NCP) { - for (;;) { - ret = CryptAcquireContext(&hProvider, NULL, NULL, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT); - if (ret != FALSE) - break; - Sleep (1); - } - } - while (xlen > 0) { - if (xlen < 1048576) - i = (unsigned) xlen; - else - i = 1048576; - - ret = CryptGenRandom(hProvider, i, x); - if (ret == FALSE) { - Sleep(1); - continue; - } - x += i; - xlen -= i; - } -} - -int randombytes_close(void) -{ - int rc = -1; - if ((hProvider != NCP) && (CryptReleaseContext(hProvider, 0) != FALSE)) { - hProvider = NCP; - rc = 0; - } - return rc; -} - -int sodium_init (void) -{ - return 0; -} - -#else - -#include -#include - -#ifdef ZMQ_HAVE_GETRANDOM -#include -#else -#include -#include -#include - -static int fd = -1; -#endif - -void randombytes (unsigned char *x,unsigned long long xlen) -{ - int i; -#ifndef ZMQ_HAVE_GETRANDOM - /* Require that random_open has already been called, to avoid - race conditions. */ - assert (fd != -1); -#endif - while (xlen > 0) { - if (xlen < 1048576) - i = xlen; - else - i = 1048576; - -#ifdef ZMQ_HAVE_GETRANDOM - i = getrandom (x, i, 0); -#else - i = read(fd,x,i); -#endif - if (i < 1) { - sleep (1); - continue; - } - x += i; - xlen -= i; - } -} - -/* Do not call manually! Use random_close from random.hpp */ -int randombytes_close (void) -{ - int rc = -1; -#ifndef ZMQ_HAVE_GETRANDOM - if (fd != -1 && close(fd) == 0) { - fd = -1; - rc = 0; - } -#endif /* ZMQ_HAVE_GETRANDOM */ - return rc; -} - -/* Do not call manually! Use random_open from random.hpp */ -int sodium_init (void) -{ -#ifndef ZMQ_HAVE_GETRANDOM - if (fd == -1) { - for (;;) { - int flags = O_RDONLY; -#ifdef ZMQ_HAVE_O_CLOEXEC - flags |= O_CLOEXEC; -#endif - fd = open ("/dev/urandom", flags); - if (fd != -1) - break; - sleep (1); - } -#if !defined ZMQ_HAVE_O_CLOEXEC && defined FD_CLOEXEC - int rc = fcntl (fd, F_SETFD, FD_CLOEXEC); - assert (rc != -1); -#endif - } -#endif /* ZMQ_HAVE_GETRANDOM */ - return 0; -} - -#endif - -#endif -/* clang-format on */ diff --git a/src/tweetnacl.h b/src/tweetnacl.h deleted file mode 100644 index 28fd9c19..00000000 --- a/src/tweetnacl.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright (c) 2016-2017 Contributors as noted in the AUTHORS file - - This file is part of libzmq, the ZeroMQ core engine in C++. - - libzmq is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License (LGPL) as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - As a special exception, the Contributors give you permission to link - this library with independent modules to produce an executable, - regardless of the license terms of these independent modules, and to - copy and distribute the resulting executable under terms of your choice, - provided that you also meet, for each linked independent module, the - terms and conditions of the license of that module. An independent - module is a module which is not derived from or based on this library. - If you modify this library, you must extend this exception to your - version of the library. - - libzmq is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . -*/ - -#ifndef TWEETNACL_H -#define TWEETNACL_H - -#if defined(ZMQ_USE_TWEETNACL) - -#define crypto_box_SECRETKEYBYTES 32 -#define crypto_box_BOXZEROBYTES 16 -#define crypto_box_NONCEBYTES 24 -#define crypto_box_ZEROBYTES 32 -#define crypto_box_PUBLICKEYBYTES 32 -#define crypto_box_BEFORENMBYTES 32 -#define crypto_secretbox_KEYBYTES 32 -#define crypto_secretbox_NONCEBYTES 24 -#define crypto_secretbox_ZEROBYTES 32 -#define crypto_secretbox_BOXZEROBYTES 16 -typedef unsigned char u8; -typedef unsigned long u32; -typedef unsigned long long u64; -typedef long long i64; -typedef i64 gf[16]; - -#ifdef __cplusplus -extern "C" { -#endif -void randombytes (unsigned char *, unsigned long long); -/* Do not call manually! Use random_close from random.hpp */ -int randombytes_close (void); -/* Do not call manually! Use random_open from random.hpp */ -int sodium_init (void); - -int crypto_box_keypair (u8 *y_, u8 *x_); -int crypto_box_afternm ( - u8 *c_, const u8 *m_, u64 d_, const u8 *n_, const u8 *k_); -int crypto_box_open_afternm ( - u8 *m_, const u8 *c_, u64 d_, const u8 *n_, const u8 *k_); -int crypto_box ( - u8 *c_, const u8 *m_, u64 d_, const u8 *n_, const u8 *y_, const u8 *x_); -int crypto_box_open ( - u8 *m_, const u8 *c_, u64 d_, const u8 *n_, const u8 *y_, const u8 *x_); -int crypto_box_beforenm (u8 *k_, const u8 *y_, const u8 *x_); -int crypto_scalarmult_base (u8 *q_, const u8 *n_); -int crypto_secretbox (u8 *c_, const u8 *m_, u64 d_, const u8 *n_, const u8 *k_); -int crypto_secretbox_open ( - u8 *m_, const u8 *c_, u64 d_, const u8 *n_, const u8 *k_); -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/src/zmq_utils.cpp b/src/zmq_utils.cpp index e83fc8f1..a66855e3 100644 --- a/src/zmq_utils.cpp +++ b/src/zmq_utils.cpp @@ -43,9 +43,7 @@ #include #endif -#if defined(ZMQ_USE_TWEETNACL) -#include "tweetnacl.h" -#elif defined(ZMQ_USE_LIBSODIUM) +#if defined(ZMQ_USE_LIBSODIUM) #include "sodium.h" #endif @@ -211,7 +209,7 @@ error_inval: } // -------------------------------------------------------------------------- -// Generate a public/private keypair with tweetnacl or libsodium. +// Generate a public/private keypair with libsodium. // Generated keys will be 40 byte z85-encoded strings. // Returns 0 on success, -1 on failure, setting errno. // Sets errno = ENOTSUP in the absence of a CURVE library. @@ -243,7 +241,7 @@ int zmq_curve_keypair (char *z85_public_key_, char *z85_secret_key_) } // -------------------------------------------------------------------------- -// Derive the public key from a private key using tweetnacl or libsodium. +// Derive the public key from a private key using libsodium. // Derived key will be 40 byte z85-encoded string. // Returns 0 on success, -1 on failure, setting errno. // Sets errno = ENOTSUP in the absence of a CURVE library. diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c57d198d..66c44b12 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -260,7 +260,7 @@ endif() foreach(test ${tests}) # target_sources not supported before CMake 3.1 if(ZMQ_HAVE_CURVE AND ${test} MATCHES test_security_curve) - add_executable(${test} ${test}.cpp "../src/tweetnacl.c" "../src/err.cpp" "../src/random.cpp" "../src/clock.cpp") + add_executable(${test} ${test}.cpp "../src/err.cpp" "../src/random.cpp" "../src/clock.cpp") else() add_executable(${test} ${test}.cpp) endif() @@ -323,11 +323,6 @@ if(NOT CMAKE_SYSTEM_NAME MATCHES "Linux") if(ZMQ_HAVE_CURVE) set_tests_properties(test_security_curve PROPERTIES TIMEOUT 60) endif() - - # add additional required flags ZMQ_USE_TWEETNACL will already be defined when not using sodium - if(ZMQ_HAVE_CURVE AND NOT ZMQ_USE_TWEETNACL) - target_compile_definitions(test_security_curve PRIVATE "-DZMQ_USE_TWEETNACL") - endif() endif() set_tests_properties(test_security_zap PROPERTIES TIMEOUT 60) diff --git a/tests/test_security_curve.cpp b/tests/test_security_curve.cpp index edc74cde..6b37a928 100644 --- a/tests/test_security_curve.cpp +++ b/tests/test_security_curve.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . */ -// TODO remove this workaround for handling libsodium/tweetnacl +// TODO remove this workaround for handling libsodium // To define SIZE_MAX with older compilers #define __STDC_LIMIT_MACROS @@ -38,18 +38,14 @@ #include "../src/platform.hpp" #endif -#ifndef ZMQ_USE_TWEETNACL -#define ZMQ_USE_TWEETNACL -#endif -#ifdef ZMQ_USE_LIBSODIUM -#undef ZMQ_USE_LIBSODIUM +#ifndef ZMQ_USE_LIBSODIUM +#define ZMQ_USE_LIBSODIUM #endif #include "testutil.hpp" #include "testutil_security.hpp" #include -#include "../src/tweetnacl.h" #include "../src/curve_client_tools.hpp" #include "../src/random.hpp" diff --git a/unittests/unittest_curve_encoding.cpp b/unittests/unittest_curve_encoding.cpp index a331476e..f795d85b 100644 --- a/unittests/unittest_curve_encoding.cpp +++ b/unittests/unittest_curve_encoding.cpp @@ -84,13 +84,14 @@ void test_roundtrip (zmq::msg_t *msg_) TEST_ASSERT_EQUAL_UINT8_ARRAY (&original[0], msg_->data (), original.size ()); } -#else - TEST_IGNORE_MESSAGE ("CURVE support is disabled"); #endif } void test_roundtrip_empty () { +#ifndef ZMQ_HAVE_CURVE + TEST_IGNORE_MESSAGE ("CURVE support is disabled"); +#endif zmq::msg_t msg; msg.init (); @@ -101,6 +102,9 @@ void test_roundtrip_empty () void test_roundtrip_small () { +#ifndef ZMQ_HAVE_CURVE + TEST_IGNORE_MESSAGE ("CURVE support is disabled"); +#endif zmq::msg_t msg; msg.init_size (32); memcpy (msg.data (), "0123456789ABCDEF0123456789ABCDEF", 32); @@ -112,6 +116,9 @@ void test_roundtrip_small () void test_roundtrip_large () { +#ifndef ZMQ_HAVE_CURVE + TEST_IGNORE_MESSAGE ("CURVE support is disabled"); +#endif zmq::msg_t msg; msg.init_size (2048); for (size_t pos = 0; pos < 2048; pos += 32) { @@ -126,6 +133,9 @@ void test_roundtrip_large () void test_roundtrip_empty_more () { +#ifndef ZMQ_HAVE_CURVE + TEST_IGNORE_MESSAGE ("CURVE support is disabled"); +#endif zmq::msg_t msg; msg.init (); msg.set_flags (zmq::msg_t::more);