Pure C source Crypt Library
#library #c #libcrypt #hash #encrypt #decrypt #md5 #sha #ecc #dsa #dh #x509 #ssl #tls #ssh

Karel Miko 83e7f4a1c7 keep dh_key.x instead of free'ing it 8 yıl önce
demos ea43d9a1d2 Fix openssl-enc compilation 8 yıl önce
doc 9fb08af23d fix location of some of the tables 8 yıl önce
hooks a00aba8370 add pre-commit hook 8 yıl önce
notes 105abdd8cd GCM: 0 size IV is not valid #273 8 yıl önce
src 83e7f4a1c7 keep dh_key.x instead of free'ing it 8 yıl önce
tests a9d9466694 beautify some strings 8 yıl önce
.clang-format 99214b53f6 add .clang-format 10 yıl önce
.gitattributes ab34b0bd93 or perhaps exclude .git* 8 yıl önce
.gitignore 08a461b39c also build openssl-enc 8 yıl önce
.travis.yml 9952fac68e tv.txt contains errors from tv_gen 8 yıl önce
LICENSE 412b2ee1fc after multiple objections of libtom users [1], we decided to change licensing 14 yıl önce
README.md 0742a99fb5 update README 8 yıl önce
build.sh 9952fac68e tv.txt contains errors from tv_gen 8 yıl önce
changes f8d132ea03 update changes 8 yıl önce
check_source.sh fe19dad623 replace SVN tags 8 yıl önce
coverage.sh fe19dad623 replace SVN tags 8 yıl önce
coverage_more.sh 8f7986bbb2 fix coverage_more.sh after updating hashsum 8 yıl önce
coverity.sh 907d5301ee update coverity build script to use makefile.unix 8 yıl önce
helper.pl e53858c740 update VERSION variables in makefiles 8 yıl önce
libtomcrypt.pc.in bf45ea66e5 drop the need for testprof/makefile* 8 yıl önce
libtomcrypt_VS2008.sln 7bb7bdde1d improving MS Windows builds (msvc) 8 yıl önce
libtomcrypt_VS2008.vcproj bc0c18f347 Update makefiles 8 yıl önce
makefile cfce691a50 initialize ltc_mp to force allocation under all compilers, including clang on macOS 8 yıl önce
makefile.mingw d7461a91bc makefile.mingw: add targets for sizes and constants demos 8 yıl önce
makefile.msvc f5353a613d makefile.msvc: add targets for sizes and constants demos 8 yıl önce
makefile.shared 39c721c8da makefile.shared: protect commas in function calls through variable substitution 8 yıl önce
makefile.unix 509086253e makefile.unix: add targets for sizes and constants demos 8 yıl önce
makefile_include.mk b2813480bf LTC_CFLAGS += -Wwrite-strings 8 yıl önce
printinfo.sh 81f0297285 small fix-ups 8 yıl önce
run.sh fe19dad623 replace SVN tags 8 yıl önce
scan_build.sh 84fcd4aec7 scan_build --status-bugs - related to #287 8 yıl önce
testbuild.sh e97d921c8d travis: print version information in build scripts 11 yıl önce
testme.sh fe19dad623 replace SVN tags 8 yıl önce
updatemakes.sh 81f0297285 small fix-ups 8 yıl önce

README.md

libtomcrypt

See doc/crypt.pdf for a detailed documentation

Project Status

master: Build Status Coverage Status

develop: Build Status Coverage Status

Coverity Scan Build Status

Submitting patches

Please branch off from develop if you want to submit a patch.

Patch integration will be faster if tests and documentation are included.

Please update the makefiles in a separate commit. To update them simply run the updatemakes.sh script.

If you have something bigger to submit, feel free to contact us beforehand. Then we can give you write access to this repo, so you can open your PR based on this repo and we can easier follow the rebase-before-merge approach we're using (or even do the rebase ourself).

Reviews

We're using Pull Request reviews to make sure that the code is in line with the existing code base.

Please have a look here to get an idea of the approach.

Branches

Please be aware, that all branches besides master and develop can and will be force-pushed, rebased and/or removed!

If you want to rely on such an unstable branch, create your own fork of this repository to make sure nothing breaks for you.

Configuration options

By default the library builds its entire feature set (besides katja) in a (depending on your needs more or less) optimal way.

There are numerous configuration options available if you want to trim down the functionality of the library.

Please have a look at src/headers/tomcrypt_custom.h for all available configuration options.

The following list is a small part of the available, but the most often required, configuration switches.

Flag Behavior
LTC_NO_TEST Remove all algorithm self-tests from the library
LTC_NO_FILE Remove all API functions requiring a pre-defined FILE data-type (mostly useful for embedded targets)
MAX_RSA_SIZE Per default set to 4096, if you need support for importing or generating bigger RSA keys, change this at compile-time.
GMP_DESC enable gmp as MPI provider *1
LTM_DESC enable libtommath as MPI provider *1
TFM_DESC enable tomsfastmath as MPI provider *1 *2
USE_GMP use gmp as MPI provider when building the binaries *3
USE_LTM use libtommath as MPI provider when building the binaries *3
USE_TFM use tomsfastmath as MPI provider when building the binaries *3

*1 It is possible to build the library against all MPI providers in parallel and choose at startup-time which math library should be used.

*2 Please be aware that tomsfastmath has the limitation of a fixed max size of MPI's.

*3 Only one is supported at the time & this is only required when building the binaries, not when building the library itself.

Building the library

There are several makefiles provided. Please choose the one that fits best for you.

makefile use-case
makefile builds a static library (GNU Make required)
makefile.shared builds a shared (and static) library (GNU Make required)
makefile.unix for unusual UNIX platforms, or if you do not have GNU Make
makefile.mingw for usage with the mingw compiler on MS Windows
makefile.msvc for usage with the MSVC compiler on MS Windows
libtomcrypt_VS2008.sln A VisualStudio 2008 project for MS Windows

Make targets

The makefiles provide several targets to build (VS project excluded). The following list does not claim to be complete resp. to be available across all makefile variants.

target application
empty target/none given c.f. library
library builds only the library
hashsum builds the hashsum binary, similar to shasum, but with support for all hash-algorithms included in the library *4
ltcrypt builds the ltcrypt binary, implementing something similar to 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 *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
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
install_docs installs the documentation created by the docs target *7 *8
install_test installs the test-app created by the test target *7 *8
install_all installs everything (i.e. library, bins, docs and test) *8
uninstall uninstalls the library and header files

*4 also builds library

*5 broken build in some configurations, therefore not built by default

*7 also builds the necessary artifact(s) before installing it

*8 also have a look at the 'Installation' section of this file

Examples

You want to build the library as static library

make

You want to build the library as shared library

make -f makefile.shared

You have libtommath installed on your system and want to build a static library and the test binary to run the self-tests.

make CFLAGS="-DUSE_LTM -DLTM_DESC" EXTRALIBS="-ltommath" test

You have tomsfastmath installed on your system and want to build a shared library and all binaries

make -f makefile.shared CFLAGS="-DUSE_TFM -DTFM_DESC" EXTRALIBS="-ltfm" all demos

You have gmp, libtommath and tomsfastmath installed on your system and want to build a static library and the timing binary to measure timings against gmp.

make CFLAGS="-DUSE_GMP -DGMP_DESC -DLTM_DESC -DTFM_DESC" EXTRALIBS="-lgmp" timing

If you have libtommath in a non-standard location:

make CFLAGS="-DUSE_LTM -DLTM_DESC -I/opt/devel/ltm" EXTRALIBS="/opt/devel/ltm/libtommath.a" all

Installation

There exist several install make-targets which are described in the table above.

These targets support the standard ways (c.f. [GNU], [FreeBSD]) to modify the installation path via the following set of variables:

DESTDIR
PREFIX
LIBPATH
INCPATH
DATAPATH
BINPATH

The entire set of the variables is only supported in makefile, makefile.shared and makefile.unix.

In case you have to use one of the other makefiles, check in the file which variables are supported.

Examples

You want to install the static library to the default paths

make install

You want to install the shared library to a special path and use it from this path

make -f makefile.shared PREFIX=/opt/special/path

Have a look at the developer documentation, [GNU] or [FreeBSD] to get a detailed explanation of all the variables.