Build mbedtls from source on Travis (#133)

* Revert "Revert "travis: Test mbedtls too""

This reverts commit c4c60eac5ca756333034b07dd9e0b97741493ed3.

* travis: Build mbedtls from source on Travis

Use TOOLCHAIN_OPTION when calling cmake on mbedtls

* tests: only run DSA tests for non-mbedtls

crypto backends
diff --git a/.travis.yml b/.travis.yml
index 6d2d28d..9a3115c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -54,6 +54,10 @@
    - ADDRESS_SIZE=64 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF
    - ADDRESS_SIZE=64 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON
    - ADDRESS_SIZE=64 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON
+   - ADDRESS_SIZE=64 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF
+   - ADDRESS_SIZE=64 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF
+   - ADDRESS_SIZE=64 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON
+   - ADDRESS_SIZE=64 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON
    - ADDRESS_SIZE=32 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF
    - ADDRESS_SIZE=32 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF
    - ADDRESS_SIZE=32 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON
@@ -62,6 +66,11 @@
    - ADDRESS_SIZE=32 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF
    - ADDRESS_SIZE=32 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON
    - ADDRESS_SIZE=32 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON
+   - ADDRESS_SIZE=32 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF
+   - ADDRESS_SIZE=32 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF
+   - ADDRESS_SIZE=32 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON
+   - ADDRESS_SIZE=32 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON
+
 
 before_install:
   # Fix issue with chrome and 32-bit multilib
@@ -76,6 +85,16 @@
   - if [ $ADDRESS_SIZE = '64' ]; then sudo apt-get install -y libssl-dev; fi
   - if [ $ADDRESS_SIZE = '64' ]; then sudo apt-get install -y libgcrypt11-dev; fi
   - if [ $ADDRESS_SIZE = '32' ]; then export TOOLCHAIN_OPTION="-DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-Linux-32.cmake"; fi
+  - if [ $CRYPTO_BACKEND = 'mbedTLS' ]; then
+      MBEDTLSVER=mbedtls-2.4.0;
+      curl -L https://github.com/ARMmbed/mbedtls/archive/$MBEDTLSVER.tar.gz | tar -xzf -;
+      cd mbedtls-$MBEDTLSVER;
+      cmake $TOOLCHAIN_OPTION -DUSE_SHARED_MBEDTLS_LIBRARY=ON -DCMAKE_INSTALL_PREFIX:PATH=../usr .;
+      make -j3 install;
+      cd ..;
+      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/usr/lib;
+      export TOOLCHAIN_OPTION="$TOOLCHAIN_OPTION -DCMAKE_PREFIX_PATH=$PWD/usr";
+    fi
 
 install:
   - mkdir bin
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index bd0f903..1f5a79f 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -60,11 +60,16 @@
   password_auth_fails_with_wrong_username
   public_key_auth_fails_with_wrong_key
   public_key_auth_succeeds_with_correct_rsa_key
-  public_key_auth_succeeds_with_correct_dsa_key
   keyboard_interactive_auth_fails_with_wrong_response
   keyboard_interactive_auth_succeeds_with_correct_response
   )
 
+if(NOT CRYPTO_BACKEND STREQUAL "mbedTLS")
+  list(APPEND TESTS
+    public_key_auth_succeeds_with_correct_dsa_key
+    )
+endif()
+
 add_library(openssh_fixture STATIC openssh_fixture.h openssh_fixture.c)
 target_link_libraries(openssh_fixture ${LIBRARIES})
 target_include_directories(openssh_fixture PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")