diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4156d7baf..1cf648dcf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,6 +12,10 @@ on: - develop - /^release\/.*$/ +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: Docs: runs-on: ubuntu-20.04 diff --git a/.gitignore b/.gitignore index e1ee3c4ef..f9db9dc77 100644 --- a/.gitignore +++ b/.gitignore @@ -22,12 +22,13 @@ doc/crypt.pdf doc/refman.pdf # *nix/windows test executables +ltc-* aesgcm aesgcm.exe constants constants.exe -ltcrypt -ltcrypt.exe +crypt +crypt.exe hashsum hashsum.exe multi diff --git a/CMakeLists.txt b/CMakeLists.txt index b28ca0b9b..91bf402e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,20 +5,23 @@ cmake_minimum_required(VERSION 3.10) -project(libtomcrypt +project( + libtomcrypt VERSION 1.18.2 DESCRIPTION "A modular cryptographic library." HOMEPAGE_URL "https://www.libtom.net/LibTomCrypt" - LANGUAGES C) + LANGUAGES C +) # package release version -# bump if re-releasing the same VERSION + patches -# set to 1 if releasing a new VERSION +# +# * bump if re-releasing the same VERSION + patches +# * set to 1 if releasing a new VERSION set(PACKAGE_RELEASE_VERSION 1) -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Include CMake modules -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- include(GNUInstallDirs) include(CheckIPOSupported) include(CMakePackageConfigHelpers) @@ -32,18 +35,24 @@ option(BUILD_TESTING "" OFF) include(CTest) include(sources.cmake) -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Options -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- option(WITH_LTM "Build with support for libtommath" TRUE) option(WITH_TFM "Build with support for tomsfastmath" FALSE) option(WITH_GMP "Build with support for GNU Multi Precision Arithmetic Library" FALSE) -set(MPI_PROVIDER "LTM" CACHE STRING "Build tests and demos against 'LTM', 'TFM' or 'GMP', default is LTM") -option(BUILD_SHARED_LIBS "Build shared library and only the shared library if \"ON\", default is static" OFF) +set(MPI_PROVIDER + "LTM" + CACHE STRING "Build tests and demos against 'LTM', 'TFM' or 'GMP', default is LTM" +) +option(BUILD_SHARED_LIBS + "Build shared library and only the shared library if \"ON\", default is static" OFF +) +option(WITH_PTHREAD "Build with pthread support" FALSE) -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Add support for ccache if desired -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- find_program(CCACHE ccache) if(CCACHE) @@ -55,9 +64,9 @@ if(CCACHE AND ENABLE_CCACHE) set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE}) endif() -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Compose CFLAGS -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Some information ported from makefile_include.mk @@ -72,9 +81,18 @@ if(MSVC) elseif(WATCOM) set(LTC_C_FLAGS -fo=.obj -oaxt -3r -w3) else() - set(LTC_C_FLAGS -Wall -Wsign-compare -Wextra -Wshadow - -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align - -Wstrict-prototypes -Wpointer-arith -Wsystem-headers) + set(LTC_C_FLAGS + -Wall + -Wsign-compare + -Wextra + -Wshadow + -Wdeclaration-after-statement + -Wbad-function-cast + -Wcast-align + -Wstrict-prototypes + -Wpointer-arith + -Wsystem-headers + ) set(CMAKE_C_FLAGS_DEBUG "-g3") set(CMAKE_C_FLAGS_RELEASE "-O3 -funroll-loops -fomit-frame-pointer") set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g3 -O2") @@ -83,12 +101,16 @@ endif() # What compiler do we have and what are their...uhm... peculiarities if(CMAKE_C_COMPILER_ID MATCHES "(C|c?)lang") - list(APPEND LTC_C_FLAGS -Wno-typedef-redefinition -Wno-tautological-compare -Wno-builtin-requires-header) + list(APPEND LTC_C_FLAGS -Wno-typedef-redefinition -Wno-tautological-compare + -Wno-builtin-requires-header + ) # Clang requires at least '-O1' for dead code eliminiation set(CMAKE_C_FLAGS_DEBUG "-O1 ${CMAKE_C_FLAGS_DEBUG}") endif() if(CMAKE_C_COMPILER MATCHES "mingw") - list(APPEND LTC_C_FLAGS -Wno-shadow -Wno-expansion-to-defined -Wno-declaration-after-statement -Wno-bad-function-cast) + list(APPEND LTC_C_FLAGS -Wno-shadow -Wno-expansion-to-defined -Wno-declaration-after-statement + -Wno-bad-function-cast + ) endif() if(CMAKE_SYSTEM_NAME MATCHES "Darwin") list(APPEND LTC_C_FLAGS -Wno-nullability-completeness) @@ -99,47 +121,42 @@ endif() if(MSVC) cmake_push_check_state() - check_symbol_exists(BCryptGenRandom bcrypt.h BCRYPT_AVAILABLE) + check_symbol_exists(BCryptGenRandom bcrypt.h BCRYPT_AVAILABLE) cmake_pop_check_state() - if (BCRYPT_AVAILABLE) + if(BCRYPT_AVAILABLE) target_link_libraries(${PROJECT_NAME} PRIVATE Bcrypt) list(APPEND LTC_C_FLAGS -DLTC_WIN32_BCRYPT) endif() endif() -# If the user set the environment variables at generate-time, append them -# in order to allow overriding our defaults. +# If the user set the environment variables at generate-time, append them in order to allow +# overriding our defaults. +# ~~~ # ${LTC_CFLAGS} means the user passed it via sth like: # $ cmake -DLTC_CFLAGS="foo" +# ~~~ list(APPEND LTC_C_FLAGS ${LTC_CFLAGS}) list(APPEND LTC_LD_FLAGS ${LTC_LDFLAGS}) -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Library targets -#----------------------------------------------------------------------------- -add_library(${PROJECT_NAME} - ${SOURCES} - ${PUBLIC_HEADERS} - ${PRIVATE_HEADERS} -) +# ----------------------------------------------------------------------------- +add_library(${PROJECT_NAME} ${SOURCES} ${PUBLIC_HEADERS} ${PRIVATE_HEADERS}) -target_include_directories(${PROJECT_NAME} PUBLIC - $ - $ +target_include_directories( + ${PROJECT_NAME} PUBLIC $ + $ ) -target_compile_options(${PROJECT_NAME} BEFORE PRIVATE - ${LTC_C_FLAGS} -) -target_link_options(${PROJECT_NAME} BEFORE PRIVATE - ${LTC_LD_FLAGS} -) +target_compile_options(${PROJECT_NAME} BEFORE PRIVATE ${LTC_C_FLAGS}) +target_link_options(${PROJECT_NAME} BEFORE PRIVATE ${LTC_LD_FLAGS}) -set_target_properties(${PROJECT_NAME} PROPERTIES - OUTPUT_NAME tomcrypt - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION_MAJOR} - PUBLIC_HEADER "${PUBLIC_HEADERS}" +set_target_properties( + ${PROJECT_NAME} + PROPERTIES OUTPUT_NAME tomcrypt + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} + PUBLIC_HEADER "${PUBLIC_HEADERS}" ) option(COMPILE_LTO "Build with LTO enabled") @@ -148,13 +165,16 @@ if(COMPILE_LTO) if(COMPILER_SUPPORTS_LTO) set_property(TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) else() - message(SEND_ERROR "This compiler does not support LTO. Reconfigure ${PROJECT_NAME} with -DCOMPILE_LTO=OFF.") + message( + SEND_ERROR + "This compiler does not support LTO. Reconfigure ${PROJECT_NAME} with -DCOMPILE_LTO=OFF." + ) endif() endif() -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # MPI provider -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # libtommath if(WITH_LTM) find_package(libtommath 1.2.0 REQUIRED) @@ -164,8 +184,8 @@ if(WITH_LTM) target_compile_definitions(${PROJECT_NAME} PUBLIC USE_LTM) endif() target_link_libraries(${PROJECT_NAME} PUBLIC libtommath) - list(APPEND LTC_MPI_PROVIDERS_CFLAGS -DLTM_DESC) - list(APPEND LTC_MPI_PROVIDERS_LIBS -ltommath) + list(APPEND LTC_PKG_CONFIG_CFLAGS -DLTM_DESC) + list(APPEND LTC_PKG_CONFIG_LIBS -ltommath) list(APPEND LTC_DEBIAN_MPI_PROVIDER_DEPENDS libtommath-dev) endif() # tomsfastmath @@ -177,8 +197,8 @@ if(WITH_TFM) target_compile_definitions(${PROJECT_NAME} PUBLIC USE_TFM) endif() target_link_libraries(${PROJECT_NAME} PUBLIC tomsfastmath) - list(APPEND LTC_MPI_PROVIDERS_CFLAGS -DTFM_DESC) - list(APPEND LTC_MPI_PROVIDERS_LIBS -ltfm) + list(APPEND LTC_PKG_CONFIG_CFLAGS -DTFM_DESC) + list(APPEND LTC_PKG_CONFIG_LIBS -ltfm) list(APPEND LTC_DEBIAN_MPI_PROVIDER_DEPENDS libtfm-dev) endif() # GNU MP @@ -190,18 +210,37 @@ if(WITH_GMP) target_compile_definitions(${PROJECT_NAME} PUBLIC USE_GMP) endif() target_link_libraries(${PROJECT_NAME} PUBLIC ${GMP_LIBRARIES}) - list(APPEND LTC_MPI_PROVIDERS_CFLAGS -DGMP_DESC) - list(APPEND LTC_MPI_PROVIDERS_LIBS -lgmp) + list(APPEND LTC_PKG_CONFIG_CFLAGS -DGMP_DESC) + list(APPEND LTC_PKG_CONFIG_LIBS -lgmp) list(APPEND LTC_DEBIAN_MPI_PROVIDER_DEPENDS libgmp-dev) endif() -list(JOIN LTC_MPI_PROVIDERS_CFLAGS " " MPI_PROVIDERS_CFLAGS) -list(JOIN LTC_MPI_PROVIDERS_LIBS " " MPI_PROVIDERS_LIBS) +# ----------------------------------------------------------------------------- +# other options +# ----------------------------------------------------------------------------- + +if(WITH_PTHREAD) + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads REQUIRED) + if(CMAKE_USE_PTHREADS_INIT) + target_compile_definitions(${PROJECT_NAME} PUBLIC LTC_PTHREAD) + target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads) + list(APPEND LTC_PKG_CONFIG_CFLAGS -DLTC_PTHREAD) + else() + message( + SEND_ERROR + "pthreads not supported. Reconfigure ${PROJECT_NAME} with -DWITH_PTHREAD=OFF." + ) + endif() +endif() + +list(JOIN LTC_PKG_CONFIG_CFLAGS " " PKG_CONFIG_CFLAGS) +list(JOIN LTC_PKG_CONFIG_LIBS " " PKG_CONFIG_LIBS) list(JOIN LTC_DEBIAN_MPI_PROVIDER_DEPENDS " " DEBIAN_MPI_PROVIDER_DEPENDS) -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # demos&test targets -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- add_subdirectory(demos) if(BUILD_TESTING) @@ -209,36 +248,40 @@ if(BUILD_TESTING) add_subdirectory(tests) endif() -#--------------------------------------------------------------------------------------- +# --------------------------------------------------------------------------------------- # Install/export targets and files -#--------------------------------------------------------------------------------------- +# --------------------------------------------------------------------------------------- set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") set(PROJECT_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake") set(PROJECT_CONFIG_FILE "${PROJECT_NAME}-config.cmake") set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") # install targets -install(TARGETS ${PROJECT_NAME} - EXPORT ${TARGETS_EXPORT_NAME} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Libraries - RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} +install( + TARGETS ${PROJECT_NAME} + EXPORT ${TARGETS_EXPORT_NAME} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Libraries + RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} ) # Install libtomcrypt.pc for pkg-config if we build a shared library if(BUILD_SHARED_LIBS) - # Let the user override the default directory of the pkg-config file (usually this shouldn't be required to be changed) - set(CMAKE_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" CACHE PATH "Folder where to install .pc files") + # Let the user override the default directory of the pkg-config file (usually this shouldn't be + # required to be changed) + set(CMAKE_INSTALL_PKGCONFIGDIR + "${CMAKE_INSTALL_LIBDIR}/pkgconfig" + CACHE PATH "Folder where to install .pc files" + ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc - @ONLY + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc @ONLY ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc - DESTINATION ${CMAKE_INSTALL_PKGCONFIGDIR} + DESTINATION ${CMAKE_INSTALL_PKGCONFIGDIR} ) endif() @@ -250,27 +293,24 @@ write_basic_package_version_file( ) # install version file -install(FILES ${PROJECT_VERSION_FILE} - DESTINATION ${CONFIG_INSTALL_DIR} -) +install(FILES ${PROJECT_VERSION_FILE} DESTINATION ${CONFIG_INSTALL_DIR}) # build directory package config -export(EXPORT ${TARGETS_EXPORT_NAME} - FILE ${PROJECT_CONFIG_FILE} -) +export(EXPORT ${TARGETS_EXPORT_NAME} FILE ${PROJECT_CONFIG_FILE}) # installed package config -install(EXPORT ${TARGETS_EXPORT_NAME} - DESTINATION ${CONFIG_INSTALL_DIR} - FILE ${PROJECT_CONFIG_FILE} +install( + EXPORT ${TARGETS_EXPORT_NAME} + DESTINATION ${CONFIG_INSTALL_DIR} + FILE ${PROJECT_CONFIG_FILE} ) # add to CMake registry export(PACKAGE ${PROJECT_NAME}) -#--------------------------------------------------------------------------------------- +# --------------------------------------------------------------------------------------- # Create release packages -#--------------------------------------------------------------------------------------- +# --------------------------------------------------------------------------------------- # determine distribution and architecture find_program(LSB_RELEASE lsb_release) @@ -278,17 +318,37 @@ find_program(SYSCTL sysctl) find_program(UNAME uname) if(UNAME) - execute_process(COMMAND uname -m OUTPUT_VARIABLE MACHINE_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND uname -m + OUTPUT_VARIABLE MACHINE_ARCH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) elseif(SYSCTL) - execute_process(COMMAND sysctl -b hw.machine_arch OUTPUT_VARIABLE MACHINE_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND sysctl -b hw.machine_arch + OUTPUT_VARIABLE MACHINE_ARCH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) else() string(TOLOWER ${CMAKE_SYSTEM_NAME} MACHINE_ARCH) endif() if(LSB_RELEASE) - execute_process(COMMAND lsb_release -si OUTPUT_VARIABLE LINUX_DISTRO OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND lsb_release -sc OUTPUT_VARIABLE LINUX_DISTRO_CODENAME OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND lsb_release -sr OUTPUT_VARIABLE LINUX_DISTRO_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND lsb_release -si + OUTPUT_VARIABLE LINUX_DISTRO + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + execute_process( + COMMAND lsb_release -sc + OUTPUT_VARIABLE LINUX_DISTRO_CODENAME + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + execute_process( + COMMAND lsb_release -sr + OUTPUT_VARIABLE LINUX_DISTRO_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) string(TOLOWER ${LINUX_DISTRO} LINUX_DISTRO) if(LINUX_DISTRO_CODENAME STREQUAL "n/a") @@ -301,7 +361,11 @@ else() endif() # make sure untagged versions get a different package name -execute_process(COMMAND git describe --exact-match --tags ERROR_QUIET RESULT_VARIABLE REPO_HAS_TAG) +execute_process( + COMMAND git describe --exact-match --tags + ERROR_QUIET + RESULT_VARIABLE REPO_HAS_TAG +) if(REPO_HAS_TAG EQUAL 0) set(PACKAGE_NAME_SUFFIX "") else() @@ -313,9 +377,16 @@ endif() set(CPACK_GENERATOR TGZ STGZ) # extra CPack generators -if(LINUX_DISTRO STREQUAL "debian" OR LINUX_DISTRO STREQUAL "ubuntu" OR LINUX_DISTRO STREQUAL "linuxmint") +if(LINUX_DISTRO STREQUAL "debian" + OR LINUX_DISTRO STREQUAL "ubuntu" + OR LINUX_DISTRO STREQUAL "linuxmint" +) list(APPEND CPACK_GENERATOR DEB) -elseif(LINUX_DISTRO STREQUAL "fedora" OR LINUX_DISTRO STREQUAL "opensuse" OR LINUX_DISTRO STREQUAL "centos") +elseif( + LINUX_DISTRO STREQUAL "fedora" + OR LINUX_DISTRO STREQUAL "opensuse" + OR LINUX_DISTRO STREQUAL "centos" +) list(APPEND CPACK_GENERATOR RPM) elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") list(APPEND CPACK_GENERATOR FREEBSD) @@ -358,7 +429,6 @@ else() set(CPACK_COMPONENTS_ALL Libraries) endif() - # rpm specific CPack config set(CPACK_RPM_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION}) set(CPACK_RPM_PACKAGE_ARCHITECTURE ${MACHINE_ARCH}) diff --git a/README.md b/README.md index 661fdbcce..d68506371 100644 --- a/README.md +++ b/README.md @@ -100,14 +100,14 @@ The following list does not claim to be complete resp. to be available across al | *empty target*/none given | c.f. `library` | `library` | builds only the library | | `hashsum` | builds the `hashsum` binary, similar to [`shasum`](https://linux.die.net/man/1/shasum), but with support for all hash-algorithms included in the library *\*4* | -| `ltcrypt` | builds the `ltcrypt` binary, implementing something similar to [`crypt`](https://linux.die.net/man/3/crypt) *\*4* | +| `crypt` | builds the `crypt` binary, implementing something similar to [`crypt`](https://linux.die.net/man/3/crypt) *\*4* | | `sizes` | builds the `sizes` binary, printing all internal data sizes on invocation *\*4* | | `constants` | builds the `constants` binary, printing all internal constants on invocation *\*4* | | `openssl-enc` | builds the `openssl-enc` binary, which is more or less compatible to [`openssl enc`](https://linux.die.net/man/1/enc) *\*4* *\*5* | | `test` | builds the `test` binary, which runs all algorithm self-tests + some extended tests *\*4* | | `timing` | builds the `timing` binary, which can be used to measure timings for algorithms and modes *\*4* | | `bins` | builds `hashsum` *\*4* | -| `all_test` | builds `test`, `hashsum`, `ltcrypt`, `small`, `tv_gen`, `sizes` & `constants` *\*4* | +| `all_test` | builds `test`, `hashsum`, `crypt`, `small`, `tv_gen`, `sizes` & `constants` *\*4* | | `docs` | builds the developer documentation `doc/crypt.pdf` | | `install` | installs the `library` and header files *\*7* *\*8* | | `install_bins` | installs the binaries created by the `bins` target *\*7* *\*8* | diff --git a/cmake-format.py b/cmake-format.py new file mode 100644 index 000000000..5f281dae3 --- /dev/null +++ b/cmake-format.py @@ -0,0 +1,241 @@ +# ---------------------------------- +# Options affecting listfile parsing +# ---------------------------------- +with section("parse"): + + # Specify structure for custom cmake functions + additional_commands = { 'foo': { 'flags': ['BAR', 'BAZ'], + 'kwargs': {'DEPENDS': '*', 'HEADERS': '*', 'SOURCES': '*'}}} + + # Override configurations per-command where available + override_spec = {} + + # Specify variable tags. + vartags = [] + + # Specify property tags. + proptags = [] + +# ----------------------------- +# Options affecting formatting. +# ----------------------------- +with section("format"): + + # Disable formatting entirely, making cmake-format a no-op + disable = False + + # How wide to allow formatted cmake files + line_width = 100 + + # How many spaces to tab for indent + tab_size = 4 + + # If true, lines are indented using tab characters (utf-8 0x09) instead of + # space characters (utf-8 0x20). In cases where the layout would + # require a fractional tab character, the behavior of the fractional + # indentation is governed by + use_tabchars = False + + # If is True, then the value of this variable indicates how + # fractional indentions are handled during whitespace replacement. If set to + # 'use-space', fractional indentation is left as spaces (utf-8 0x20). If set + # to `round-up` fractional indentation is replaced with a single tab character + # (utf-8 0x09) effectively shifting the column to the next tabstop + fractional_tab_policy = 'use-space' + + # If an argument group contains more than this many sub-groups (parg or kwarg + # groups) then force it to a vertical layout. + max_subgroups_hwrap = 2 + + # If a positional argument group contains more than this many arguments, then + # force it to a vertical layout. + max_pargs_hwrap = 6 + + # If a cmdline positional group consumes more than this many lines without + # nesting, then invalidate the layout (and nest) + max_rows_cmdline = 2 + + # If true, separate flow control names from their parentheses with a space + separate_ctrl_name_with_space = False + + # If true, separate function names from parentheses with a space + separate_fn_name_with_space = False + + # If a statement is wrapped to more than one line, than dangle the closing + # parenthesis on its own line. + dangle_parens = True + + # If the trailing parenthesis must be 'dangled' on its on line, then align it + # to this reference: `prefix`: the start of the statement, `prefix-indent`: + # the start of the statement, plus one indentation level, `child`: align to + # the column of the arguments + dangle_align = 'prefix' + + # If the statement spelling length (including space and parenthesis) is + # smaller than this amount, then force reject nested layouts. + min_prefix_chars = 4 + + # If the statement spelling length (including space and parenthesis) is larger + # than the tab width by more than this amount, then force reject un-nested + # layouts. + max_prefix_chars = 10 + + # If a candidate layout is wrapped horizontally but it exceeds this many + # lines, then reject the layout. + max_lines_hwrap = 2 + + # What style line endings to use in the output. + line_ending = 'unix' + + # Format command names consistently as 'lower' or 'upper' case + command_case = 'lower' + + # Format keywords consistently as 'lower' or 'upper' case + keyword_case = 'upper' + + # A list of command names which should always be wrapped + always_wrap = [] + + # If true, the argument lists which are known to be sortable will be sorted + # lexicographicall + enable_sort = True + + # If true, the parsers may infer whether or not an argument list is sortable + # (without annotation). + autosort = False + + # By default, if cmake-format cannot successfully fit everything into the + # desired linewidth it will apply the last, most agressive attempt that it + # made. If this flag is True, however, cmake-format will print error, exit + # with non-zero status code, and write-out nothing + require_valid_layout = False + + # A dictionary mapping layout nodes to a list of wrap decisions. See the + # documentation for more information. + layout_passes = {} + +# ------------------------------------------------ +# Options affecting comment reflow and formatting. +# ------------------------------------------------ +with section("markup"): + + # What character to use for bulleted lists + bullet_char = '*' + + # What character to use as punctuation after numerals in an enumerated list + enum_char = '.' + + # If comment markup is enabled, don't reflow the first comment block in each + # listfile. Use this to preserve formatting of your copyright/license + # statements. + first_comment_is_literal = False + + # If comment markup is enabled, don't reflow any comment block which matches + # this (regex) pattern. Default is `None` (disabled). + literal_comment_pattern = None + + # Regular expression to match preformat fences in comments default= + # ``r'^\s*([`~]{3}[`~]*)(.*)$'`` + fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$' + + # Regular expression to match rulers in comments default= + # ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'`` + ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$' + + # If a comment line matches starts with this pattern then it is explicitly a + # trailing comment for the preceeding argument. Default is '#<' + explicit_trailing_pattern = '#<' + + # If a comment line starts with at least this many consecutive hash + # characters, then don't lstrip() them off. This allows for lazy hash rulers + # where the first hash char is not separated by space + hashruler_min_length = 10 + + # If true, then insert a space between the first hash char and remaining hash + # chars in a hash ruler, and normalize its length to fill the column + canonicalize_hashrulers = True + + # enable comment markup parsing and reflow + enable_markup = True + +# ---------------------------- +# Options affecting the linter +# ---------------------------- +with section("lint"): + + # a list of lint codes to disable + disabled_codes = [] + + # regular expression pattern describing valid function names + function_pattern = '[0-9a-z_]+' + + # regular expression pattern describing valid macro names + macro_pattern = '[0-9A-Z_]+' + + # regular expression pattern describing valid names for variables with global + # (cache) scope + global_var_pattern = '[A-Z][0-9A-Z_]+' + + # regular expression pattern describing valid names for variables with global + # scope (but internal semantic) + internal_var_pattern = '_[A-Z][0-9A-Z_]+' + + # regular expression pattern describing valid names for variables with local + # scope + local_var_pattern = '[a-z][a-z0-9_]+' + + # regular expression pattern describing valid names for privatedirectory + # variables + private_var_pattern = '_[0-9a-z_]+' + + # regular expression pattern describing valid names for public directory + # variables + public_var_pattern = '[A-Z][0-9A-Z_]+' + + # regular expression pattern describing valid names for function/macro + # arguments and loop variables. + argument_var_pattern = '[a-z][a-z0-9_]+' + + # regular expression pattern describing valid names for keywords used in + # functions or macros + keyword_pattern = '[A-Z][0-9A-Z_]+' + + # In the heuristic for C0201, how many conditionals to match within a loop in + # before considering the loop a parser. + max_conditionals_custom_parser = 2 + + # Require at least this many newlines between statements + min_statement_spacing = 1 + + # Require no more than this many newlines between statements + max_statement_spacing = 2 + max_returns = 6 + max_branches = 12 + max_arguments = 5 + max_localvars = 15 + max_statements = 50 + +# ------------------------------- +# Options affecting file encoding +# ------------------------------- +with section("encode"): + + # If true, emit the unicode byte-order mark (BOM) at the start of the file + emit_byteorder_mark = False + + # Specify the encoding of the input file. Defaults to utf-8 + input_encoding = 'utf-8' + + # Specify the encoding of the output file. Defaults to utf-8. Note that cmake + # only claims to support utf-8 so be careful when using anything else + output_encoding = 'utf-8' + +# ------------------------------------- +# Miscellaneous configurations options. +# ------------------------------------- +with section("misc"): + + # A dictionary containing any per-command configuration overrides. Currently + # only `command_case` is supported. + per_command = {} + diff --git a/coverity.sh b/coverity.sh index 5f40097c7..341c5084f 100755 --- a/coverity.sh +++ b/coverity.sh @@ -39,6 +39,4 @@ curl -k --form project=libtomcrypt \ --form description="\"libtomcrypt version ${myversion}\"" \ https://scan.coverity.com/builds?project=libtom%2Flibtomcrypt -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$ +# EOF diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index 7d71b3236..7de73093e 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -1,88 +1,99 @@ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Options -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- option(BUILD_USEFUL_DEMOS "Build useful demos (hashsum)" FALSE) -option(BUILD_USABLE_DEMOS "Build usable demos (ltcrypt sizes constants pem-info)" FALSE) +option(BUILD_USABLE_DEMOS "Build usable demos (crypt sizes constants pem-info)" FALSE) +option(BUILD_BROKEN_DEMOS "Build broken demos (aesgcm openssh-privkey openssl-enc timing)" FALSE) +option(BUILD_TEST_DEMOS "Build test demos (small tv_gen)" FALSE) -#----------------------------------------------------------------------------- +option(INSTALL_DEMOS "Install enabled demos (USEFUL and/or USABLE) and ltc wrapper script" FALSE) +option(INSTALL_BROKEN_DEMOS "Install broken demos and ltc wrapper script" FALSE) + +# ----------------------------------------------------------------------------- # Useful demos -#----------------------------------------------------------------------------- +# +# Demos that are even somehow useful and could be installed as a system-tool +# +# * USEFUL_DEMOS = hashsum +# ----------------------------------------------------------------------------- if(BUILD_USEFUL_DEMOS) - - list(APPEND ALL_DEMOS_TARGETS hashsum tv_gen) - - # hashsum - add_executable(hashsum - ${CMAKE_CURRENT_SOURCE_DIR}/hashsum.c - ) - - target_link_libraries(hashsum PRIVATE - ${PROJECT_NAME} - ) - - # tv_gen - add_executable(tv_gen - ${CMAKE_CURRENT_SOURCE_DIR}/tv_gen.c - ) - - target_link_libraries(tv_gen PRIVATE - ${PROJECT_NAME} - ) - + list(APPEND USABLE_DEMOS_TARGETS hashsum) endif() -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Usable demos -#----------------------------------------------------------------------------- +# +# Demos that are usable but only rarely make sense to be installed +# +# USEABLE_DEMOS = crypt sizes constants pem-info +# ----------------------------------------------------------------------------- if(BUILD_USABLE_DEMOS) + list(APPEND USABLE_DEMOS_TARGETS crypt sizes constants pem-info) +endif() - list(APPEND ALL_DEMOS_TARGETS ltcrypt sizes constants pem-info) - - # ltcrypt - add_executable(ltcrypt - ${CMAKE_CURRENT_SOURCE_DIR}/ltcrypt.c - ) +# ----------------------------------------------------------------------------- +# Broken demos +# +# Demos that are kind of useful, but in some way broken +# +# * aesgcm - can't be built with LTC_EASY +# * openssl-enc - can't be built with LTC_EASY +# * openssh-privkey - can't be built with LTC_EASY +# * timing - not really broken, but older gcc builds spit warnings +# +# BROKEN_DEMOS = aesgcm openssl-enc openssh-privkey timing +# ----------------------------------------------------------------------------- + +if(BUILD_BROKEN_DEMOS AND INSTALL_BROKEN_DEMOS) + list(APPEND USABLE_DEMOS_TARGETS aesgcm openssh-privkey openssl-enc timing) +elseif(BUILD_BROKEN_DEMOS) + list(APPEND ALL_DEMOS_TARGETS aesgcm openssh-privkey openssl-enc timing) +endif() - target_link_libraries(ltcrypt PRIVATE - ${PROJECT_NAME} - ) +# ----------------------------------------------------------------------------- +# Test demos +# +# Demos that are used for testing or measuring +# +# * TEST_DEMOS = small tv_gen +# ----------------------------------------------------------------------------- - # sizes - add_executable(sizes - ${CMAKE_CURRENT_SOURCE_DIR}/sizes.c - ) +if(BUILD_TEST_DEMOS) + list(APPEND ALL_DEMOS_TARGETS small tv_gen) +endif() - target_link_libraries(sizes PRIVATE - ${PROJECT_NAME} - ) +# ----------------------------------------------------------------------------- +# Generate executables +# ----------------------------------------------------------------------------- - # constants - add_executable(constants - ${CMAKE_CURRENT_SOURCE_DIR}/constants.c - ) +# USABLE_DEMOS can get installed, so they're prefixed with `ltc-` +foreach(target ${USABLE_DEMOS_TARGETS}) + list(APPEND ALL_DEMOS_INSTALL_TARGETS ltc-${target}) - target_link_libraries(constants PRIVATE - ${PROJECT_NAME} - ) + add_executable(ltc-${target} ${CMAKE_CURRENT_SOURCE_DIR}/${target}.c) - # pem-info - add_executable(pem-info - ${CMAKE_CURRENT_SOURCE_DIR}/pem-info.c - ) + target_link_libraries(ltc-${target} PRIVATE ${PROJECT_NAME}) +endforeach() - target_link_libraries(pem-info PRIVATE - ${PROJECT_NAME} - ) +foreach(target ${ALL_DEMOS_TARGETS}) + add_executable(${target} ${CMAKE_CURRENT_SOURCE_DIR}/${target}.c) -endif() + target_link_libraries(${target} PRIVATE ${PROJECT_NAME}) +endforeach() -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Install targets -#----------------------------------------------------------------------------- -install(TARGETS ${ALL_DEMOS_TARGETS} +# ----------------------------------------------------------------------------- +if(INSTALL_DEMOS) + install( + TARGETS ${ALL_DEMOS_INSTALL_TARGETS} COMPONENT "runtime" EXPORT ${TARGETS_EXPORT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} -) + ) + + # Also install the `ltc` wrapper script + install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/ltc DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() diff --git a/demos/ltcrypt.c b/demos/crypt.c similarity index 100% rename from demos/ltcrypt.c rename to demos/crypt.c diff --git a/demos/ltc b/demos/ltc new file mode 100755 index 000000000..1182e3ae9 --- /dev/null +++ b/demos/ltc @@ -0,0 +1,34 @@ +#!/bin/sh + +RELDIR="/$0" +RELDIR="${RELDIR%/*}" +RELDIR="${RELDIR:-.}" +RELDIR="${RELDIR##/}/" + +BINDIR=`cd "$RELDIR"; pwd` + +err_out() { + err=$1 + shift + echo $* >&2 + exit $err +} + +usage() { + cat >&$(($1 + 1)) << EOF +Available commands are: +`ls -1 $BINDIR/ltc-* | sed "s@$BINDIR/ltc-@ @g"` + help +EOF + exit $1 +} + +[ $# -gt 0 ] || usage 1 + +TOOL="$1" +shift +[ "$TOOL" == "help" ] || [ "$TOOL" == "--help" ] || [ "$TOOL" == "-h" ] && usage 0 + +test -x "$BINDIR/ltc-$TOOL" || err_out 1 "Unknown command: $TOOL" + +[ $# -gt 0 ] && "$BINDIR/ltc-$TOOL" "$@" || "$BINDIR/ltc-$TOOL" diff --git a/demos/small.c b/demos/small.c index aa8902ce1..2531718a2 100644 --- a/demos/small.c +++ b/demos/small.c @@ -5,7 +5,11 @@ int main(void) { +#ifdef LTC_RIJNDAEL +#ifdef ENCRYPT_ONLY register_cipher(&rijndael_enc_desc); +#endif +#endif register_prng(&yarrow_desc); register_hash(&sha256_desc); return 0; diff --git a/doc/crypt.tex b/doc/crypt.tex index 183601d31..ba31872a9 100644 --- a/doc/crypt.tex +++ b/doc/crypt.tex @@ -10111,7 +10111,3 @@ \subsection{After v1.18.0} \printindex \end{document} - -% ref: $Format:%D$ -% git commit: $Format:%H$ -% commit time: $Format:%ai$ diff --git a/helper.pl b/helper.pl index 7dbfe1043..b24551d02 100755 --- a/helper.pl +++ b/helper.pl @@ -406,7 +406,3 @@ sub die_usage { die_usage unless defined $failure; exit $failure ? 1 : 0; - -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$ diff --git a/libtomcrypt.pc.in b/libtomcrypt.pc.in index ebc977d87..4ca6bbeaa 100644 --- a/libtomcrypt.pc.in +++ b/libtomcrypt.pc.in @@ -5,5 +5,5 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/@PROJECT_NAME@ Name: LibTomCrypt Description: public domain open source cryptographic toolkit Version: @PROJECT_VERSION@ -Libs: -L${libdir} -ltomcrypt @MPI_PROVIDERS_LIBS@ -Cflags: -I${includedir} @MPI_PROVIDERS_CFLAGS@ +Libs: -L${libdir} -ltomcrypt @PKG_CONFIG_LIBS@ +Cflags: -I${includedir} @PKG_CONFIG_CFLAGS@ diff --git a/makefile b/makefile index 2d038207e..70d40d654 100644 --- a/makefile +++ b/makefile @@ -84,7 +84,7 @@ $(1): $(call print-help,$(1),Builds the library and the '$(1)' demo) demos/$(1). ifneq ($V,1) @echo " * $${CC} $$@" ${silent_echo} endif - $${silent} $$(CC) $$(LTC_LDFLAGS) $$< $$(LIB_PRE) $$(LIBNAME) $$(LIB_POST) $$(LTC_EXTRALIBS) -o $(1) + $${silent} $$(CC) $$(LTC_LDFLAGS) $$< $$(LIB_PRE) $$(LIBNAME) $$(LIB_POST) $$(LTC_EXTRALIBS) -o $$@ endef $(foreach demo, $(strip $(DEMOS)), $(eval $(call DEMO_template,$(demo)))) @@ -141,7 +141,3 @@ coverage: $(call print-help,coverage,Create code-coverage of the library - but b # cleans everything - coverage output and standard 'clean' cleancov: cleancov-clean clean - -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$ diff --git a/makefile.mingw b/makefile.mingw index 05c06b9e3..9de4f29b7 100644 --- a/makefile.mingw +++ b/makefile.mingw @@ -284,8 +284,8 @@ $(LIBMAIN_D) $(LIBMAIN_I): $(OBJECTS) #Demo tools/utilities hashsum.exe: demos/hashsum.o $(LIBMAIN_S) $(CC) demos/hashsum.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -ltcrypt.exe: demos/ltcrypt.o $(LIBMAIN_S) - $(CC) demos/ltcrypt.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ +crypt.exe: demos/crypt.o $(LIBMAIN_S) + $(CC) demos/crypt.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ small.exe: demos/small.o $(LIBMAIN_S) $(CC) demos/small.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ tv_gen.exe: demos/tv_gen.o $(LIBMAIN_S) @@ -302,7 +302,7 @@ test.exe: $(TOBJECTS) $(LIBMAIN_S) $(CC) $(TOBJECTS) $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ @echo NOTICE: start the tests by launching test.exe -all: $(LIBMAIN_S) $(LIBMAIN_I) $(LIBMAIN_D) hashsum.exe ltcrypt.exe small.exe tv_gen.exe sizes.exe constants.exe timing.exe test.exe +all: $(LIBMAIN_S) $(LIBMAIN_I) $(LIBMAIN_D) hashsum.exe crypt.exe small.exe tv_gen.exe sizes.exe constants.exe timing.exe test.exe test: test.exe @@ -321,15 +321,11 @@ install: $(LIBMAIN_S) $(LIBMAIN_I) $(LIBMAIN_D) copy /Y src\headers\tomcrypt*.h "$(PREFIX)\include" #Install useful tools -install_bins: hashsum +install_bins: hashsum.exe cmd /c if not exist "$(PREFIX)\bin" mkdir "$(PREFIX)\bin" - copy /Y hashsum.exe "$(PREFIX)\bin" + copy /Y hashsum.exe "$(PREFIX)\bin\ltc-hashsum.exe" #Install documentation install_docs: doc/crypt.pdf cmd /c if not exist "$(PREFIX)\doc" mkdir "$(PREFIX)\doc" copy /Y doc\crypt.pdf "$(PREFIX)\doc" - -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$ diff --git a/makefile.msvc b/makefile.msvc index 145efe8af..e95a26cc7 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -271,8 +271,8 @@ $(LIBMAIN_S): $(OBJECTS) #Demo tools/utilities hashsum.exe: demos/hashsum.c tests/common.c $(LIBMAIN_S) cl $(LTC_CFLAGS) demos/hashsum.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ -ltcrypt.exe: demos/ltcrypt.c $(LIBMAIN_S) - cl $(LTC_CFLAGS) demos/ltcrypt.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ +crypt.exe: demos/crypt.c $(LIBMAIN_S) + cl $(LTC_CFLAGS) demos/crypt.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ small.exe: demos/small.c $(LIBMAIN_S) cl $(LTC_CFLAGS) demos/small.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ tv_gen.exe: demos/tv_gen.c $(LIBMAIN_S) @@ -289,7 +289,7 @@ test.exe: $(LIBMAIN_S) $(TOBJECTS) cl $(LTC_CFLAGS) $(TOBJECTS) $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ @echo NOTICE: start the tests by launching test.exe -all: $(LIBMAIN_S) hashsum.exe ltcrypt.exe small.exe tv_gen.exe sizes.exe constants.exe timing.exe test.exe +all: $(LIBMAIN_S) hashsum.exe crypt.exe small.exe tv_gen.exe sizes.exe constants.exe timing.exe test.exe test: test.exe @@ -306,15 +306,11 @@ install: $(LIBMAIN_S) copy /Y src\headers\tomcrypt*.h "$(PREFIX)\include" #Install useful tools -install_bins: hashsum +install_bins: hashsum.exe cmd /c if not exist "$(PREFIX)\bin" mkdir "$(PREFIX)\bin" - copy /Y hashsum.exe "$(PREFIX)\bin" + copy /Y hashsum.exe "$(PREFIX)\bin\ltc-hashsum.exe" #Install documentation install_docs: doc/crypt.pdf cmd /c if not exist "$(PREFIX)\doc" mkdir "$(PREFIX)\doc" copy /Y doc\crypt.pdf "$(PREFIX)\doc" - -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$ diff --git a/makefile.shared b/makefile.shared index 310840c99..5506219d7 100644 --- a/makefile.shared +++ b/makefile.shared @@ -55,17 +55,24 @@ endif include makefile_include.mk ifneq ($(findstring -DLTM_DESC,$(LTC_CFLAGS)),) -LTC_MPI_PROVIDERS_CFLAGS += -DLTM_DESC -LTC_MPI_PROVIDERS_LIBS += -ltommath +LTC_PKG_CONFIG_CFLAGS += -DLTM_DESC +LTC_PKG_CONFIG_LIBS += -ltommath endif ifneq ($(findstring -DTFM_DESC,$(LTC_CFLAGS)),) -LTC_MPI_PROVIDERS_CFLAGS += -DTFM_DESC -LTC_MPI_PROVIDERS_LIBS += -ltfm +LTC_PKG_CONFIG_CFLAGS += -DTFM_DESC +LTC_PKG_CONFIG_LIBS += -ltfm endif ifneq ($(findstring -DGMP_DESC,$(LTC_CFLAGS)),) -LTC_MPI_PROVIDERS_CFLAGS += -DGMP_DESC -LTC_MPI_PROVIDERS_LIBS += -lgmp +LTC_PKG_CONFIG_CFLAGS += -DGMP_DESC +LTC_PKG_CONFIG_LIBS += -lgmp endif +ifneq ($(findstring -DLTC_PTHREAD,$(LTC_CFLAGS)),) +LTC_PKG_CONFIG_CFLAGS += -DLTC_PTHREAD +endif + +# set PKG_CONFIG_CFLAGS and PKG_CONFIG_LIBS to what your environment requires +LTC_PKG_CONFIG_CFLAGS += $(PKG_CONFIG_CFLAGS) +LTC_PKG_CONFIG_LIBS += $(PKG_CONFIG_LIBS) #ciphers come in two flavours... enc+dec and enc src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c @@ -87,7 +94,7 @@ test: $(call print-help,test,Builds the library and the 'test' application to ru # build the demos from a template define DEMO_template $(1): $(call print-help,$(1),Builds the library and the '$(1)' demo) demos/$(1).o $$(LIBNAME) - $$(TGTLIBTOOL) --mode=link --tag=CC $$(CC) $$(LTC_LDFLAGS) $$^ $$(EXTRALIBS) -o $(1) + $$(TGTLIBTOOL) --mode=link --tag=CC $$(CC) $$(LTC_LDFLAGS) $$^ $$(EXTRALIBS) -o $$@ endef $(foreach demo, $(strip $(DEMOS)), $(eval $(call DEMO_template,$(demo)))) @@ -95,8 +102,8 @@ $(foreach demo, $(strip $(DEMOS)), $(eval $(call DEMO_template,$(demo)))) install: $(call print-help,install,Installs the library + headers + pkg-config file) .common_install sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' -e 's,^libdir=.*,libdir=$(LIBPATH),' \ -e 's,^includedir=.*,includedir=$(INCPATH),' \ - -e 's,@MPI_PROVIDERS_LIBS@,$(LTC_MPI_PROVIDERS_LIBS),' \ - -e 's,@MPI_PROVIDERS_CFLAGS@,$(LTC_MPI_PROVIDERS_CFLAGS),' libtomcrypt.pc.in > libtomcrypt.pc + -e 's,@PKG_CONFIG_LIBS@,$(LTC_PKG_CONFIG_LIBS),' \ + -e 's,@PKG_CONFIG_CFLAGS@,$(LTC_PKG_CONFIG_CFLAGS),' libtomcrypt.pc.in > libtomcrypt.pc install -p -d $(DESTDIR)$(LIBPATH)/pkgconfig install -p -m 644 libtomcrypt.pc $(DESTDIR)$(LIBPATH)/pkgconfig/ @@ -104,7 +111,3 @@ install_bins: $(call print-help,install_bins,Installs the useful demos ($(USEFUL uninstall: $(call print-help,uninstall,Uninstalls the library + headers + pkg-config file) .common_uninstall rm $(DESTDIR)$(LIBPATH)/pkgconfig/libtomcrypt.pc - -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$ diff --git a/makefile.unix b/makefile.unix index 3a05dec7b..ba0b266ce 100644 --- a/makefile.unix +++ b/makefile.unix @@ -295,8 +295,8 @@ $(LIBMAIN_S): $(OBJECTS) #Demo tools/utilities hashsum: demos/hashsum.o $(LIBMAIN_S) $(CC) demos/hashsum.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -ltcrypt: demos/ltcrypt.o $(LIBMAIN_S) - $(CC) demos/ltcrypt.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ +crypt: demos/crypt.o $(LIBMAIN_S) + $(CC) demos/crypt.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ small: demos/small.o $(LIBMAIN_S) $(CC) demos/small.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ tv_gen: demos/tv_gen.o $(LIBMAIN_S) @@ -313,15 +313,15 @@ test: $(TOBJECTS) $(LIBMAIN_S) $(CC) $(TOBJECTS) $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ @echo "NOTICE: start the tests by: ./test" -all: $(LIBMAIN_S) hashsum ltcrypt small tv_gen sizes constants timing test +all: $(LIBMAIN_S) hashsum crypt small tv_gen sizes constants timing test #NOTE: this makefile works also on cygwin, thus we need to delete *.exe clean: -@rm -f $(OBJECTS) $(TOBJECTS) -@rm -f $(LIBMAIN_S) -@rm -f demos/*.o *_tv.txt - -@rm -f test constants sizes tv_gen hashsum ltcrypt small timing - -@rm -f test.exe constants.exe sizes.exe tv_gen.exe hashsum.exe ltcrypt.exe small.exe timing.exe + -@rm -f test constants sizes tv_gen hashsum crypt small timing + -@rm -f test.exe constants.exe sizes.exe tv_gen.exe hashsum.exe crypt.exe small.exe timing.exe #Install the library + headers install: $(LIBMAIN_S) @@ -336,13 +336,10 @@ install: $(LIBMAIN_S) #Install useful tools install_bins: hashsum @mkdir -p $(DESTDIR)$(BINPATH) - @cp hashsum $(DESTDIR)$(BINPATH)/ + @cp hashsum $(DESTDIR)$(BINPATH)/ltc-hashsum + @cp demos/ltc $(DESTDIR)$(BINPATH)/ltc #Install documentation install_docs: doc/crypt.pdf @mkdir -p $(DESTDIR)$(DATAPATH) @cp doc/crypt.pdf $(DESTDIR)$(DATAPATH)/ - -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$ diff --git a/makefile_include.mk b/makefile_include.mk index 62b7f98ed..ec2f92e6c 100644 --- a/makefile_include.mk +++ b/makefile_include.mk @@ -76,12 +76,17 @@ endef # by giving them as a parameter to make: # make CFLAGS="-I./src/headers/ -DLTC_SOURCE ..." ... # +# Also we're expecting that our users know what they do and if they use EXTRALIBS +# they also gave the correct include paths. +# +ifndef EXTRALIBS ifneq ($(shell echo $(CFLAGS) | grep LTM_DESC),) LTC_CFLAGS+=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --cflags-only-I libtommath) endif ifneq ($(shell echo $(CFLAGS) | grep TFM_DESC),) LTC_CFLAGS+=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --cflags-only-I tomsfastmath) endif +endif LTC_CFLAGS += -I./src/headers/ -DLTC_SOURCE -Wall -Wsign-compare -Wshadow ifdef OLD_GCC @@ -168,7 +173,7 @@ TEST=test USEFUL_DEMOS = hashsum # Demos that are usable but only rarely make sense to be installed -USEABLE_DEMOS = ltcrypt sizes constants pem-info +USEABLE_DEMOS = crypt sizes constants pem-info # Demos that are used for testing or measuring TEST_DEMOS = small tv_gen @@ -485,7 +490,8 @@ $(DESTDIR)$(BINPATH): install -p -d $(DESTDIR)$(BINPATH) .common_install_bins: $(USEFUL_DEMOS) $(DESTDIR)$(BINPATH) - $(INSTALL_CMD) -p -m 775 $(USEFUL_DEMOS) $(DESTDIR)$(BINPATH) + for d in $(USEFUL_DEMOS); do $(INSTALL_CMD) -p -m 775 $$d $(DESTDIR)$(BINPATH)/ltc-$$d + $(INSTALL_CMD) -p -m 775 demos/ltc $(DESTDIR)$(BINPATH) install_docs: $(call print-help,install_docs,Installs the Developer Manual) doc/crypt.pdf install -p -d $(DESTDIR)$(DATAPATH) @@ -551,7 +557,3 @@ codecheck: $(call print-help,codecheck,Check the code of the library) perlcritic *.pl help: $(call print-help,help,That's what you're currently looking at) - -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$ diff --git a/notes/etc/saferp_optimizer.c b/notes/etc/saferp_optimizer.c index 4a66d6340..e9fc93c03 100644 --- a/notes/etc/saferp_optimizer.c +++ b/notes/etc/saferp_optimizer.c @@ -170,8 +170,3 @@ printf(" }\n}\n\n"); return 0; } - - -/* ref: $Format:%D$ */ -/* git commit: $Format:%H$ */ -/* commit time: $Format:%ai$ */ diff --git a/notes/etc/whirlgen.c b/notes/etc/whirlgen.c index d537cefe2..2062ca82b 100644 --- a/notes/etc/whirlgen.c +++ b/notes/etc/whirlgen.c @@ -87,9 +87,3 @@ int main(void) return 0; } - - - -/* ref: $Format:%D$ */ -/* git commit: $Format:%H$ */ -/* commit time: $Format:%ai$ */ diff --git a/notes/etc/whirltest.c b/notes/etc/whirltest.c index d8c24e889..806453778 100644 --- a/notes/etc/whirltest.c +++ b/notes/etc/whirltest.c @@ -12,8 +12,3 @@ int main(void) } } } - - -/* ref: $Format:%D$ */ -/* git commit: $Format:%H$ */ -/* commit time: $Format:%ai$ */ diff --git a/testme.sh b/testme.sh index e497161fb..8cdf4c137 100755 --- a/testme.sh +++ b/testme.sh @@ -65,7 +65,3 @@ bash .ci/run.sh "NO_TIMING_RESISTANCE" "-DLTC_NO_ECC_TIMING_RESISTANT -DLTC_NO_R # CLEANSTACK+NOTABLES+SMALL+NO_ASM+NO_TIMING_RESISTANCE bash .ci/run.sh "CLEANSTACK+NOTABLES+SMALL+NO_ASM+NO_TIMING_RESISTANCE" "-DLTC_CLEAN_STACK -DLTC_NO_TABLES -DLTC_SMALL_CODE -DLTC_NO_ECC_TIMING_RESISTANT -DLTC_NO_RSA_BLINDING" "$mk" "$2" "$3" || exit 1 - -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2be451b16..487b10f22 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -12,8 +12,7 @@ if(PROJECT_NAME) set(LIBRARY_NAME ${PROJECT_NAME}) else() # Define an independent project and all the necessary stuff around - project(${LTC_TEST} - LANGUAGES C) + project(${LTC_TEST} LANGUAGES C) set(LIBRARY_NAME libtomcrypt) find_package(${LIBRARY_NAME}) include(CTest) @@ -22,50 +21,40 @@ else() endif() endif() -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Compose CFLAGS etc. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- if(NOT MSVC) set(CMAKE_C_FLAGS_DEBUG "-g3 -O1") endif() -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # demo target -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- include(sources.cmake) -set(PRIVATE_HEADERS - common.h - tomcrypt_test.h -) +set(PRIVATE_HEADERS common.h tomcrypt_test.h) -add_executable(${LTC_TEST} - ${SOURCES} - ${PRIVATE_HEADERS} -) +add_executable(${LTC_TEST} ${SOURCES} ${PRIVATE_HEADERS}) -target_include_directories(${LTC_TEST} PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR} - $<$:${CMAKE_CURRENT_SOURCE_DIR}/..> +target_include_directories( + ${LTC_TEST} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + $<$:${CMAKE_CURRENT_SOURCE_DIR}/..> ) -target_link_libraries(${LTC_TEST} PRIVATE - ${LIBRARY_NAME} -) +target_link_libraries(${LTC_TEST} PRIVATE ${LIBRARY_NAME}) -target_compile_options(${LTC_TEST} PRIVATE - $<$,SHARED_LIBRARY>:-DLTC_TEST_DYNAMIC> - -DCMAKE_SOURCE_DIR=\"${CMAKE_SOURCE_DIR}\" - ${LTC_C_FLAGS} -) -target_link_options(${LTC_TEST} BEFORE PUBLIC - ${LTC_LD_FLAGS} +target_compile_options( + ${LTC_TEST} + PRIVATE $<$,SHARED_LIBRARY>:-DLTC_TEST_DYNAMIC> + -DCMAKE_SOURCE_DIR=\"${CMAKE_SOURCE_DIR}\" ${LTC_C_FLAGS} ) +target_link_options(${LTC_TEST} BEFORE PUBLIC ${LTC_LD_FLAGS}) -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # CTest -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- add_test(NAME ${LTC_TEST} COMMAND ${LTC_TEST}) find_program(MEMORYCHECK_COMMAND valgrind) -set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full") \ No newline at end of file +set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full") diff --git a/updatemakes.sh b/updatemakes.sh index 3fcd0e909..98cd90c73 100755 --- a/updatemakes.sh +++ b/updatemakes.sh @@ -10,7 +10,3 @@ if [ $# -eq 1 ] && [ "$1" == "-c" ]; then fi exit 0 - -# ref: $Format:%D$ -# git commit: $Format:%H$ -# commit time: $Format:%ai$