Browse Source

Merge pull request #677 from libtom/some-improvements

Some improvements
Steffen Jaeckel 10 months ago
parent
commit
507c66827f
25 changed files with 584 additions and 276 deletions
  1. 4 0
      .github/workflows/main.yml
  2. 3 2
      .gitignore
  3. 160 90
      CMakeLists.txt
  4. 2 2
      README.md
  5. 241 0
      cmake-format.py
  6. 1 3
      coverity.sh
  7. 74 63
      demos/CMakeLists.txt
  8. 0 0
      demos/crypt.c
  9. 34 0
      demos/ltc
  10. 4 0
      demos/small.c
  11. 0 4
      doc/crypt.tex
  12. 0 4
      helper.pl
  13. 2 2
      libtomcrypt.pc.in
  14. 1 5
      makefile
  15. 5 9
      makefile.mingw
  16. 5 9
      makefile.msvc
  17. 16 13
      makefile.shared
  18. 7 10
      makefile.unix
  19. 6 6
      makefile_include.mk
  20. 0 5
      notes/etc/saferp_optimizer.c
  21. 0 6
      notes/etc/whirlgen.c
  22. 0 5
      notes/etc/whirltest.c
  23. 0 4
      testme.sh
  24. 19 30
      tests/CMakeLists.txt
  25. 0 4
      updatemakes.sh

+ 4 - 0
.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

+ 3 - 2
.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

+ 160 - 90
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
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/headers>
-    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}>
+target_include_directories(
+    ${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/headers>
+                           $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}>
 )
 
-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})

+ 2 - 2
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* |

+ 241 - 0
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
+  # <tab_size> 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 <fractional_tab_policy>
+  use_tabchars = False
+
+  # If <use_tabchars> 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 = {}
+

+ 1 - 3
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

+ 74 - 63
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()

+ 0 - 0
demos/ltcrypt.c → demos/crypt.c


+ 34 - 0
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"

+ 4 - 0
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;

+ 0 - 4
doc/crypt.tex

@@ -10111,7 +10111,3 @@ These three MPI init functions have been introduced in version 1.18.0 and have b
 \printindex
 
 \end{document}
-
-% ref:         $Format:%D$
-% git commit:  $Format:%H$
-% commit time: $Format:%ai$

+ 0 - 4
helper.pl

@@ -406,7 +406,3 @@ $failure ||= process_makefiles(1) if $update_makefiles;
 
 die_usage unless defined $failure;
 exit $failure ? 1 : 0;
-
-# ref:         $Format:%D$
-# git commit:  $Format:%H$
-# commit time: $Format:%ai$

+ 2 - 2
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@

+ 1 - 5
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$

+ 5 - 9
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$

+ 5 - 9
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$

+ 16 - 13
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$

+ 7 - 10
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$

+ 6 - 6
makefile_include.mk

@@ -82,6 +82,9 @@ endif
 ifneq ($(shell echo $(CFLAGS) | grep TFM_DESC),)
 LTC_CFLAGS+=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --cflags-only-I tomsfastmath)
 endif
+ifneq ($(shell echo $(CFLAGS) | grep GMP_DESC),)
+LTC_CFLAGS+=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --cflags-only-I gmp)
+endif
 LTC_CFLAGS += -I./src/headers/ -DLTC_SOURCE -Wall -Wsign-compare -Wshadow
 
 ifdef OLD_GCC
@@ -168,7 +171,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 +488,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 +555,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$

+ 0 - 5
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$ */

+ 0 - 6
notes/etc/whirlgen.c

@@ -87,9 +87,3 @@ int main(void)
   return 0;
    
 }
-
-
-
-/* ref:         $Format:%D$ */
-/* git commit:  $Format:%H$ */
-/* commit time: $Format:%ai$ */

+ 0 - 5
notes/etc/whirltest.c

@@ -12,8 +12,3 @@ int main(void)
         }
    }
 }
-
-
-/* ref:         $Format:%D$ */
-/* git commit:  $Format:%H$ */
-/* commit time: $Format:%ai$ */

+ 0 - 4
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$

+ 19 - 30
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}
-    $<$<STREQUAL:${PROJECT_NAME},${LTC_TEST}>:${CMAKE_CURRENT_SOURCE_DIR}/..>
+target_include_directories(
+    ${LTC_TEST} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+                        $<$<STREQUAL:${PROJECT_NAME},${LTC_TEST}>:${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
-    $<$<STREQUAL:$<TARGET_PROPERTY:${LIBRARY_NAME},TYPE>,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 $<$<STREQUAL:$<TARGET_PROPERTY:${LIBRARY_NAME},TYPE>,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")
+set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full")

+ 0 - 4
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$