diff --git a/CMakeLists.txt b/CMakeLists.txt index 88acccc..f8ebd17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,15 +38,16 @@ add_library(pcloudcc_lib SHARED ${CMD_PATH}/pclsync_lib_c.cpp ${CMD_PATH}/pclsyn target_link_libraries(pcloudcc_lib ${PCLSYNC_PATH}/psynclib.a - ${MBEDTLS2_PATH}/build/library/libmbedcrypto.a - ${MBEDTLS2_PATH}/build/library/libmbedx509.a - ${MBEDTLS2_PATH}/build/library/libmbedtls.a fuse pthread sqlite3 z dl - udev) + udev + ${MBEDTLS2_PATH}/build/library/libmbedtls.a + ${MBEDTLS2_PATH}/build/library/libmbedx509.a + ${MBEDTLS2_PATH}/build/library/libmbedcrypto.a +) add_executable(pcloudcc ${CMD_PATH}/main.cpp) diff --git a/Makefile b/Makefile index 26f6d37..20b6b41 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ all: make -C ./lib/pclsync fs - cmake -DCMAKE_BUILD_TYPE=Debug -H./lib/mbedtls-2.1.14 -B./lib/mbedtls-2.1.14/build + cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_PROGRAMS=OFF -DENABLE_TESTING=OFF -H./lib/mbedtls-2.1.14 -B./lib/mbedtls-2.1.14/build make -C ./lib/mbedtls-2.1.14/build mkdir -p ./cmd/pcloudcc/build cmake -DCMAKE_BUILD_TYPE=Debug -H. -B./cmd/pcloudcc/build diff --git a/lib/pclsync/Makefile b/lib/pclsync/Makefile index cbdbf55..71243a4 100644 --- a/lib/pclsync/Makefile +++ b/lib/pclsync/Makefile @@ -9,7 +9,7 @@ CFLAGS=-Werror -O2 -g -fno-stack-protector -fomit-frame-pointer -I../sqlite -fPI LIB_A=psynclib.a UNAME_S := $(shell uname -s) UNAME_V := $(shell uname -v) -CFLAGS += -DP_OS_LINUX -D_FILE_OFFSET_BITS=64 -DP_SSL_MBEDTLS -I../mbedtls-1.3.10/include -I ../mbedtls-2.1.14/include +CFLAGS += -DP_OS_LINUX -D_FILE_OFFSET_BITS=64 -DP_SSL_MBEDTLS -I ../mbedtls-2.1.14/include LDFLAGS += -lssl -lcrypto -lfuse -lpthread -lsqlite3 -lzlib OBJ=pcompat.o psynclib.o plocks.o plibs.o pcallbacks.o pdiff.o pstatus.o papi.o ptimer.o\ diff --git a/lib/pclsync/pssl.c b/lib/pclsync/pssl.c index 46e23b9..1befa1a 100644 --- a/lib/pclsync/pssl.c +++ b/lib/pclsync/pssl.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -620,16 +621,32 @@ psync_rsa_publickey_t psync_ssl_rsa_load_public(const unsigned char *keydata, mbedtls_pk_context ctx; mbedtls_rsa_context *rsa; int ret; + + debug(D_NOTICE, "Public key data (first 16 bytes): %02x %02x %02x %02x ...", + keydata[0], keydata[1], keydata[2], keydata[3]); + mbedtls_pk_init(&ctx); if (unlikely(ret = mbedtls_pk_parse_public_key(&ctx, keydata, keylen))) { - debug(D_WARNING, "pk_parse_public_key failed with code %d", ret); + debug(D_WARNING, "pk_parse_public_key failed with code %d (-0x%04x)", ret, + -ret); + char error_buf[100]; + mbedtls_strerror(ret, error_buf, sizeof(error_buf)); + debug(D_WARNING, "Error details: %s", error_buf); return PSYNC_INVALID_RSA; } + + if (mbedtls_pk_get_type(&ctx) != MBEDTLS_PK_RSA) { + debug(D_WARNING, "Parsed key is not RSA"); + mbedtls_pk_free(&ctx); + return PSYNC_INVALID_RSA; + } + rsa = psync_new(mbedtls_rsa_context); mbedtls_rsa_init(rsa, MBEDTLS_RSA_PKCS_V21, MBEDTLS_MD_SHA1); ret = mbedtls_rsa_copy(rsa, mbedtls_pk_rsa(ctx)); mbedtls_pk_free(&ctx); if (unlikely(ret)) { + debug(D_WARNING, "rsa_copy failed with code %d", ret); mbedtls_rsa_free(rsa); psync_free(rsa); return PSYNC_INVALID_RSA;