diff --git a/cmake/FindArgon2.cmake b/cmake/FindArgon2.cmake index 8378ebd54..5f196fc8d 100644 --- a/cmake/FindArgon2.cmake +++ b/cmake/FindArgon2.cmake @@ -14,8 +14,21 @@ # along with this program. If not, see . find_path(ARGON2_INCLUDE_DIR argon2.h) -find_library(ARGON2_LIBRARIES argon2) +if (MINGW) + # find static library on Windows, and redefine used symbols to + # avoid definition name conflicts with libsodium + find_library(ARGON2_SYS_LIBRARIES libargon2.a) + message(STATUS "Patching libargon2...") + execute_process(COMMAND objcopy + --redefine-sym argon2_hash=libargon2_argon2_hash + --redefine-sym argon2_error_message=libargon2_argon2_error_message + ${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH) +else() + find_library(ARGON2_LIBRARIES argon2) +endif() mark_as_advanced(ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Argon2 DEFAULT_MSG ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) \ No newline at end of file +find_package_handle_standard_args(Argon2 DEFAULT_MSG ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) diff --git a/src/crypto/argon2/argon2.h b/src/crypto/argon2/argon2.h new file mode 100644 index 000000000..8ea6108aa --- /dev/null +++ b/src/crypto/argon2/argon2.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef KEEPASSXC_CRYPTO_ARGON2_H +#define KEEPASSXC_CRYPTO_ARGON2_H + +/* + Argon2 wrapper header with redefined symbols to be used with the + patched libargon2 binary which is generated by the build system. + This is to avoid link-time definition clashes with libsodium on Windows. + */ + +#ifdef Q_OS_WIN +#define argon2_hash libargon2_argon2_hash +#define argon2_error_message libargon2_argon2_error_message +#endif + +#include + +#endif //KEEPASSXC_CRYPTO_ARGON2_H diff --git a/src/crypto/kdf/Argon2Kdf.cpp b/src/crypto/kdf/Argon2Kdf.cpp index cd8474056..f67c9c1fb 100644 --- a/src/crypto/kdf/Argon2Kdf.cpp +++ b/src/crypto/kdf/Argon2Kdf.cpp @@ -18,8 +18,8 @@ #include "Argon2Kdf.h" #include -#include +#include "crypto/argon2/argon2.h" #include "format/KeePass2.h" /**