Skip to content

Commit

Permalink
Initial ykcore import into code base
Browse files Browse the repository at this point in the history
  • Loading branch information
droidmonkey committed Sep 5, 2021
1 parent 0450bf3 commit 6e27dd8
Show file tree
Hide file tree
Showing 23 changed files with 2,948 additions and 25 deletions.
7 changes: 0 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -458,13 +458,6 @@ include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
# QREncode required for TOTP
find_package(QREncode REQUIRED)

# Optional
if(WITH_XC_YUBIKEY)
find_package(YubiKey REQUIRED)

include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS})
endif()

if(UNIX)
check_cxx_source_compiles("#include <sys/prctl.h>
int main() { prctl(PR_SET_DUMPABLE, 0); return 0; }"
Expand Down
6 changes: 6 additions & 0 deletions COPYING
Original file line number Diff line number Diff line change
Expand Up @@ -238,3 +238,9 @@ Files: share/icons/application/scalable/actions/hibp.svg
share/icons/database/C64_Apple.svg
Copyright: GPL-2+
Comment: from the Simple Icons repo (https://github.com/simple-icons/simple-icons/)

Files: src/thirdparty/ykcore/yk*
src/thirdparty/ykcore/yubikey.h
Copyright: 2006-2015, Yubico AB
License: BSD-2-Clause
Comment: from the yubikey-personalization repo (https://github.com/Yubico/yubikey-personalization)
4 changes: 1 addition & 3 deletions cmake/CLangFormat.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

set(EXCLUDED_DIRS
# third-party directories
src/thirdparty/
src/zxcvbn/
# objective-c directories
src/touchid/
Expand All @@ -29,9 +30,6 @@ set(EXCLUDED_FILES
gui/KMessageWidget.cpp
gui/MainWindowAdaptor.h
gui/MainWindowAdaptor.cpp
crypto/ssh/bcrypt_pbkdf.cpp
crypto/ssh/blf.h
crypto/ssh/blowfish.c
tests/modeltest.cpp
tests/modeltest.h
# objective-c files
Expand Down
4 changes: 3 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,8 @@ if(WITH_XC_FDOSECRETS)
set(fdosecrets_LIB fdosecrets)
endif()

add_subdirectory(thirdparty)

set(autotype_SOURCES
core/Tools.cpp
autotype/AutoType.cpp
Expand Down Expand Up @@ -318,9 +320,9 @@ target_link_libraries(keepassx_core
Qt5::Network
Qt5::Widgets
${BOTAN2_LIBRARIES}
${YUBIKEY_LIBRARIES}
${ZXCVBN_LIBRARIES}
${ZLIB_LIBRARIES}
${thirdparty_LIBRARIES}
)

if(WITH_XC_SSHAGENT)
Expand Down
19 changes: 5 additions & 14 deletions src/keys/drivers/YubiKey.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,14 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include <ykcore.h>
#include <ykdef.h>
#include <ykpers-version.h>
#include <ykstatus.h>
#include "YubiKey.h"

#include "core/Tools.h"
#include "crypto/Random.h"

#include "YubiKey.h"
#include "thirdparty/ykcore/ykcore.h"
#include "thirdparty/ykcore/ykdef.h"
#include "thirdparty/ykcore/ykstatus.h"

#include <QtConcurrent>

Expand All @@ -38,16 +37,11 @@ namespace
if (onlyKey) {
*onlyKey = false;
}
#if YKPERS_VERSION_NUMBER >= 0x011200
// This function is only available in ykcore >= 1.18.0
key = yk_open_key(ykIndex);
#else
// Only allow for the first found key to be used
if (ykIndex == 0) {
key = yk_open_first_key();
}
#endif
#if YKPERS_VERSION_NUMBER >= 0x011400

// New fuction available in yubikey-personalization version >= 1.20.0 that allows
// selecting device VID/PID (yk_open_key_vid_pid)
if (!key) {
Expand All @@ -57,9 +51,6 @@ namespace
*onlyKey = true;
}
}
#else
Q_UNUSED(okIndex);
#endif
return key;
}

Expand Down
1 change: 1 addition & 0 deletions src/qrcode/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ set(qrcode_SOURCES

add_library(qrcode STATIC ${qrcode_SOURCES})
target_link_libraries(qrcode Qt5::Core Qt5::Widgets Qt5::Svg ${QRENCODE_LIBRARY})
target_include_directories(qrcode PRIVATE ${QRENCODE_INCLUDE_DIR})
19 changes: 19 additions & 0 deletions src/thirdparty/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright (C) 2021 KeePassXC Team <[email protected]>
#
# 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 <http://www.gnu.org/licenses/>.

if(WITH_XC_YUBIKEY)
add_subdirectory(ykcore)
set(thirdparty_LIBRARIES ${thirdparty_LIBRARIES} ykcore PARENT_SCOPE)
endif()
42 changes: 42 additions & 0 deletions src/thirdparty/ykcore/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Copyright (C) 2021 KeePassXC Team <[email protected]>
#
# 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 <http://www.gnu.org/licenses/>.

set(ykcore_SOURCES
ykcore.c
ykstatus.c
ykcrc.c
)

add_library(ykcore STATIC ${ykcore_SOURCES})

if(WIN32)
target_sources(ykcore PRIVATE ykcore_windows.c)
target_link_libraries(ykcore PRIVATE uuid setupapi hid)
elseif(UNIX AND NOT APPLE)
target_sources(ykcore PRIVATE ykcore_libusb-1.0.c)

find_library(LIBUSB_LIBRARY NAMES usb-1.0)
find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h PATH_SUFFIXES "libusb-1.0" "libusb")
if(NOT LIBUSB_LIBRARY OR NOT LIBUSB_INCLUDE_DIR)
message(FATAL_ERROR "libusb-1.0 dev package required, but not found")
endif()

target_link_libraries(ykcore PRIVATE ${LIBUSB_LIBRARY})
target_include_directories(ykcore PRIVATE ${LIBUSB_INCLUDE_DIR})
target_compile_definitions(ykcore PRIVATE _GNU_SOURCE)
elseif(APPLE)
target_sources(ykcore PRIVATE ykcore_osx.c)
target_link_libraries(ykcore PUBLIC "-framework IOKit")
endif()
62 changes: 62 additions & 0 deletions src/thirdparty/ykcore/ykbzero.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/* -*- mode:C; c-file-style: "bsd" -*- */
/*
* Copyright (c) 2008-2019 Yubico AB
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef __YKBZERO_H_INCLUDED__
#define __YKBZERO_H_INCLUDED__

#ifdef _WIN32
#include <windows.h>
#else
#include <string.h>
#endif

#if defined(_WIN32)
#define insecure_memzero(buf, len) SecureZeroMemory(buf, len)
#elif defined(HAVE_MEMSET_S)
#define insecure_memzero(buf, len) memset_s(buf, len, 0, len)
#elif defined(HAVE_EXPLICIT_BZERO)
#define insecure_memzero(buf, len) explicit_bzero(buf, len)
#elif defined(HAVE_EXPLICIT_MEMSET)
#define insecure_memzero(buf, len) explicit_memset(buf, 0, len)
#elif defined(HAVE_INLINE_ASM)
#define insecure_memzero(buf, len) do { \
memset(buf, 0, len); \
__asm__ __volatile__ ("" : : "r"(buf) : "memory"); \
} while (0)
#else
#define insecure_memzero(buf, len) do { \
volatile unsigned char *volatile __buf_ = \
(volatile unsigned char *volatile)buf; \
size_t __i_ = 0; \
while (__i_ < len) __buf_[__i_++] = 0; \
} while (0)
#endif

#endif /* __YKBZERO_H_INCLUDED__ */
Loading

0 comments on commit 6e27dd8

Please sign in to comment.