diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a028c745..159236e40 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,8 @@ option(USE_SYSTEM_ANGELSCRIPT "Use system angelscript instead of built-in angels option(USE_SYSTEM_ENET "Use system ENET instead of the built-in version, when available." ON) option(USE_SYSTEM_GLEW "Use system GLEW instead of the built-in version, when available." ON) +CMAKE_DEPENDENT_OPTION(USE_CRYPTO_OPENSSL "Use OpenSSL instead of Nettle for cryptography in STK." OFF + "NOT APPLE" ON) CMAKE_DEPENDENT_OPTION(BUILD_RECORDER "Build opengl recorder" ON "NOT SERVER_ONLY;NOT APPLE" OFF) CMAKE_DEPENDENT_OPTION(USE_FRIBIDI "Support for right-to-left languages" ON @@ -453,26 +455,45 @@ else() target_link_libraries(supertuxkart ${PTHREAD_LIBRARY}) endif() -# CURL and OpenSSL +# CURL and OpenSSL or Nettle # 1.0.1d for compatible AES GCM handling SET(OPENSSL_MINIMUM_VERSION "1.0.1d") if(MSVC) + set(USE_CRYPTO_OPENSSL ON) target_link_libraries(supertuxkart ${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib/libcurl.lib) target_link_libraries(supertuxkart ${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib/libeay32.lib) elseif(MINGW) + set(USE_CRYPTO_OPENSSL ON) target_link_libraries(supertuxkart ${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib/libcurldll.a) target_link_libraries(supertuxkart ${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib/libeay32.dll) else() find_package(CURL REQUIRED) - find_package(OpenSSL REQUIRED) - - if(${OPENSSL_VERSION} VERSION_LESS ${OPENSSL_MINIMUM_VERSION} OR - (${OPENSSL_VERSION} VERSION_EQUAL ${OPENSSL_MINIMUM_VERSION} AND ${OPENSSL_VERSION} STRLESS ${OPENSSL_MINIMUM_VERSION})) - message(FATAL_ERROR "OpenSSL version found (${OPENSSL_VERSION}) is less then the minimum required (${OPENSSL_MINIMUM_VERSION}), aborting.") - endif() - include_directories(${CURL_INCLUDE_DIRS}) - include_directories(${OpenSSL_INCLUDE_DIRS}) + + find_path(NETTLE_INCLUDE_DIRS nettle/gcm.h nettle/sha.h nettle/base64.h nettle/yarrow.h) + find_library(NETTLE_LIBRARY NAMES nettle libnettle) + + if (NOT NETTLE_INCLUDE_DIRS OR NOT NETTLE_LIBRARY OR USE_CRYPTO_OPENSSL) + set(USE_CRYPTO_OPENSSL ON) + find_package(OpenSSL REQUIRED) + + if(${OPENSSL_VERSION} VERSION_LESS ${OPENSSL_MINIMUM_VERSION} OR + (${OPENSSL_VERSION} VERSION_EQUAL ${OPENSSL_MINIMUM_VERSION} AND ${OPENSSL_VERSION} STRLESS ${OPENSSL_MINIMUM_VERSION})) + message(FATAL_ERROR "OpenSSL version found (${OPENSSL_VERSION}) is less then the minimum required (${OPENSSL_MINIMUM_VERSION}), aborting.") + endif() + include_directories(${OpenSSL_INCLUDE_DIRS}) + else() + set(USE_CRYPTO_OPENSSL OFF) + include_directories(${NETTLE_INCLUDE_DIRS}) + endif() +endif() + +if (USE_CRYPTO_OPENSSL) + message(STATUS "OpenSSL will be used for cryptography in STK.") + add_definitions(-DENABLE_CRYPTO_OPENSSL) +else() + message(STATUS "Nettle will be used for cryptography in STK.") + add_definitions(-DENABLE_CRYPTO_NETTLE) endif() # Common library dependencies @@ -484,9 +505,14 @@ target_link_libraries(supertuxkart stkirrlicht ${Angelscript_LIBRARIES} ${CURL_LIBRARIES} - ${OPENSSL_CRYPTO_LIBRARY} ) +if (USE_CRYPTO_OPENSSL) + target_link_libraries(supertuxkart ${OPENSSL_CRYPTO_LIBRARY}) +else() + target_link_libraries(supertuxkart ${NETTLE_LIBRARY}) +endif() + if(NOT SERVER_ONLY) if(NOT USE_GLES2) target_link_libraries(supertuxkart ${OPENGL_gl_LIBRARY} ${GLEW_LIBRARIES}) diff --git a/android/Android.mk b/android/Android.mk index 67fddb84d..a2f0f0724 100644 --- a/android/Android.mk +++ b/android/Android.mk @@ -161,6 +161,7 @@ LOCAL_CFLAGS := -I../lib/angelscript/include \ -Iobj/openssl/include \ -DUSE_GLES2 \ -DENABLE_SOUND \ + -DENABLE_CRYPTO_OPENSSL \ -DNDEBUG \ -DANDROID_PACKAGE_NAME=\"$(PACKAGE_NAME)\" \ -DANDROID_APP_DIR_NAME=\"$(APP_DIR_NAME)\" \ diff --git a/data/gui/blue_flag.png b/data/gui/blue_flag.png index bb62e53c3..4b23dbe30 100644 Binary files a/data/gui/blue_flag.png and b/data/gui/blue_flag.png differ diff --git a/data/gui/help7.stkgui b/data/gui/help7.stkgui index 8c8dfb2b6..42376bd48 100644 --- a/data/gui/help7.stkgui +++ b/data/gui/help7.stkgui @@ -59,7 +59,7 @@ + text="When input devices are configured, select the 'multiplayer' icon in the main menu. Each player can press the 'fire' key of their gamepad or keyboard to join the game, and use their input device to select their kart. The game continues when everyone selected their kart. Note that the mouse may not be used for this operation."/> diff --git a/data/gui/hourglass.png b/data/gui/hourglass.png index fa7a2f62b..3a775b0c7 100644 Binary files a/data/gui/hourglass.png and b/data/gui/hourglass.png differ diff --git a/data/gui/main_menu.stkgui b/data/gui/main_menu.stkgui index ab4bac2f7..d796f1dd3 100644 --- a/data/gui/main_menu.stkgui +++ b/data/gui/main_menu.stkgui @@ -25,9 +25,9 @@ I18N="Main menu button" text="Addons"/> - + - + @@ -38,7 +38,7 @@ - + -
- - +
+ + -
-
diff --git a/data/gui/online/server_selection.stkgui b/data/gui/online/server_selection.stkgui index 5c19d2eb0..a1f581483 100644 --- a/data/gui/online/server_selection.stkgui +++ b/data/gui/online/server_selection.stkgui @@ -17,6 +17,10 @@
diff --git a/data/gui/overworld_dialog.stkgui b/data/gui/overworld_dialog.stkgui index cf304fb03..62c8453c5 100644 --- a/data/gui/overworld_dialog.stkgui +++ b/data/gui/overworld_dialog.stkgui @@ -1,7 +1,7 @@
-
+
diff --git a/data/gui/race_paused_dialog.stkgui b/data/gui/race_paused_dialog.stkgui index b31d50af8..f8a19c343 100644 --- a/data/gui/race_paused_dialog.stkgui +++ b/data/gui/race_paused_dialog.stkgui @@ -1,7 +1,7 @@ -
-
+
+
diff --git a/data/gui/red_flag.png b/data/gui/red_flag.png index 6b61a3c47..622b48319 100644 Binary files a/data/gui/red_flag.png and b/data/gui/red_flag.png differ diff --git a/data/gui/track_info.stkgui b/data/gui/track_info.stkgui index ccd88b596..898af703c 100644 --- a/data/gui/track_info.stkgui +++ b/data/gui/track_info.stkgui @@ -2,12 +2,12 @@ -
+
- +
@@ -24,7 +24,7 @@
- +
@@ -32,7 +32,7 @@
- +
@@ -40,6 +40,22 @@
+ + +
+ + +
+ + + +
+ + +
+
- +