X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/813390c45f438f411662b1a55678e63f11681eb4..7db733d4d0fd085313e4ae3d8ff9b7cc533616bb:/Makefile.am diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..98c246a4 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,1120 @@ +### -*-makefile-*- +### +### Build script for Catacomb +### +### (c) 2013 Straylight/Edgeware +### + +###----- Licensing notice --------------------------------------------------- +### +### This file is part of Catacomb. +### +### Catacomb is free software; you can redistribute it and/or modify +### it under the terms of the GNU Library General Public License as +### published by the Free Software Foundation; either version 2 of the +### License, or (at your option) any later version. +### +### Catacomb is distributed in the hope that it will be useful, +### but WITHOUT ANY WARRANTY; without even the implied warranty of +### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +### GNU Library General Public License for more details. +### +### You should have received a copy of the GNU Library General Public +### License along with Catacomb; if not, write to the Free +### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +### MA 02111-1307, USA. + +###-------------------------------------------------------------------------- +### Miscellaneous useful definitions. + +## Some convenient abbreviations for file suffixes. +e = $(EXEEXT) +o = $(OBJEXT) +t = t$e + +## Installation directories. +archincludedir = $(pkglibdir)/include + +###-------------------------------------------------------------------------- +### Initial values of common variables. + +SUBDIRS = + +EXTRA_DIST = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = +SUFFIXES = +TESTS = +BUILT_SOURCES = + +bin_PROGRAMS = +noinst_PROGRAMS = +lib_LTLIBRARIES = +noinst_LTLIBRARIES = +pkginclude_HEADERS = +nodist_pkginclude_HEADERS = +archinclude_HEADERS = +nodist_archinclude_HEADERS = +dist_man_MANS = + +###-------------------------------------------------------------------------- +### Standard configuration substitutions. + +## Substitute tags in files. +confsubst = $(top_srcdir)/confsubst +EXTRA_DIST += confsubst + +SUBSTITUTIONS = \ + prefix=$(prefix) exec_prefix=$(exec_prefix) \ + libdir=$(libdir) includedir=$(includedir) \ + PACKAGE=$(PACKAGE) VERSION=$(VERSION) + +V_SUBST = $(V_SUBST_$(V)) +V_SUBST_ = $(V_SUBST_$(AM_DEFAULT_VERBOSITY)) +V_SUBST_0 = @echo " SUBST $@"; +SUBST = $(V_SUBST)$(confsubst) + +###-------------------------------------------------------------------------- +### The main library. + +lib_LTLIBRARIES += libcatacomb.la +libcatacomb_la_LIBADD = $(CATACOMB_LIBS) +libcatacomb_la_LDFLAGS = -version-info $(LIBTOOL_VERSION_INFO) +libcatacomb_la_SOURCES = +nodist_libcatacomb_la_SOURCES = + +###-------------------------------------------------------------------------- +### Basic utilities. + +## The locked-memory arena. +pkginclude_HEADERS += arena.h +libcatacomb_la_SOURCES += arena.c + +## Constant-type operations. +pkginclude_HEADERS += ct.h +libcatacomb_la_SOURCES += ct.c + +## Acceptable key-size descriptions. +pkginclude_HEADERS += keysz.h +libcatacomb_la_SOURCES += keysz.c keysz-conv.c + +## System-level memory locking. +pkginclude_HEADERS += lmem.h +libcatacomb_la_SOURCES += lmem.c + +## Clearing secrets from memory. +pkginclude_HEADERS += paranoia.h + +###-------------------------------------------------------------------------- +### Main multiprecision integer library. + +## This library is unfortunately intertwined with some of the code generation +## programs, so we must be rather careful. The important bits of the maths +## library needed by these programs is separated out into `libmpbase'. There +## is work going on to fix this unpleasant situation by generating the +## relevant files from Python scripts rather than C programs, using +## information gathered by `configure'. +noinst_LTLIBRARIES += libmpbase.la +libcatacomb_la_LIBADD += libmpbase.la +libmpbase_la_SOURCES = +$(libmpbase_la_OBJECTS): mptypes.h + +## Additional buffer I/O functions for mathematical objects. +pkginclude_HEADERS += buf.h +libcatacomb_la_SOURCES += buf.c + +## Infrastructure for fast exponentiation. +pkginclude_HEADERS += exp.h +libcatacomb_la_SOURCES += exp.c + +## Main user-visible multiprecision arithmetic. +pkginclude_HEADERS += mp.h +libmpbase_la_SOURCES += mp-arith.c +TESTS += mp-arith.$t +libmpbase_la_SOURCES += mp-const.c +libcatacomb_la_SOURCES += mp-exp.c mp-exp.h +libcatacomb_la_SOURCES += mp-gcd.c +TESTS += mp-gcd.$t +libmpbase_la_SOURCES += mp-io.c +libcatacomb_la_SOURCES += mp-jacobi.c +TESTS += mp-jacobi.$t +libmpbase_la_SOURCES += mp-mem.c +libmpbase_la_SOURCES += mp-misc.c +libcatacomb_la_SOURCES += mp-modexp.c +TESTS += mp-modexp.$t +libcatacomb_la_SOURCES += mp-modsqrt.c +TESTS += mp-modsqrt.$t +libcatacomb_la_SOURCES += mp-sqrt.c +TESTS += mp-sqrt.$t +libcatacomb_la_SOURCES += mp-test.c +EXTRA_DIST += tests/mp + +## Computing Fibonacci numbers. +pkginclude_HEADERS += mp-fibonacci.h +libcatacomb_la_SOURCES += mp-fibonacci.c +TESTS += mp-fibonacci.$t + +## Special memory allocation for multiprecision integers. +pkginclude_HEADERS += mparena.h +libmpbase_la_SOURCES += mparena.c + +## Barrett reduction, an efficient method for modular reduction. +pkginclude_HEADERS += mpbarrett.h +libcatacomb_la_SOURCES += mpbarrett.c +TESTS += mpbarrett.$t +libcatacomb_la_SOURCES += mpbarrett-exp.c mpbarrett-mexp.c mpbarrett-exp.h +TESTS += mpbarrett-exp.$t mpbarrett-mexp.$t +EXTRA_DIST += tests/mpbarrett + +## Solving congruences using the Chinese Remainder Theorem. +pkginclude_HEADERS += mpcrt.h +libcatacomb_la_SOURCES += mpcrt.c +TESTS += mpcrt.$t +EXTRA_DIST += tests/mpcrt + +## Conversions between machine-native and multiprecision integers. +pkginclude_HEADERS += mpint.h +libcatacomb_la_SOURCES += mpint.c +TESTS += mpint.$t +EXTRA_DIST += tests/mpint + +## Table of upper and lower limits of various types of machine integers, as +## multiprecision integers. +nodist_archinclude_HEADERS += mplimits.h +nodist_libcatacomb_la_SOURCES += mplimits.c +CLEANFILES += mplimits.h mplimits.c +noinst_PROGRAMS += genlimits +genlimits_LDADD = libmpbase.la +mplimits.c: genlimits$e + $(AM_V_GEN)./genlimits c >mplimits.c.new && \ + mv mplimits.c.new mplimits.c +mplimits.h: genlimits$e + $(AM_V_GEN)./genlimits h >mplimits.h.new && \ + mv mplimits.h.new mplimits.h +$(genlimits_OBJECTS): mptypes.h +mplimits.lo: mplimits.h + +## Montgomery reduction, a clever method for modular arithmetic. +pkginclude_HEADERS += mpmont.h +libcatacomb_la_SOURCES += mpmont.c +TESTS += mpmont.$t +libcatacomb_la_SOURCES += mpmont-exp.c mpmont-mexp.c mpmont-exp.h +TESTS += mpmont-exp.$t mpmont-mexp.$t +EXTRA_DIST += tests/mpmont + +## Efficient multiplication of many small numbers. +pkginclude_HEADERS += mpmul.h +libcatacomb_la_SOURCES += mpmul.c +TESTS += mpmul.$t + +## Generating random numbers. +pkginclude_HEADERS += mprand.h +libcatacomb_la_SOURCES += mprand.c + +## Efficient reduction modulo numbers with conveninent binary +## representations. +pkginclude_HEADERS += mpreduce.h +libcatacomb_la_SOURCES += mpreduce.c mpreduce-exp.h +TESTS += mpreduce.$t +EXTRA_DIST += tests/mpreduce + +## Iteratiion over the bianry representation of multiprecision integers. +pkginclude_HEADERS += mpscan.h +libmpbase_la_SOURCES += mpscan.c + +## Conversion between multiprecision integers and their textual +## representations. +pkginclude_HEADERS += mptext.h +libmpbase_la_SOURCES += mptext.c +TESTS += mptext.$t +libcatacomb_la_SOURCES += mptext-dstr.c +libcatacomb_la_SOURCES += mptext-file.c +libcatacomb_la_SOURCES += mptext-len.c +libmpbase_la_SOURCES += mptext-string.c +EXTRA_DIST += tests/mptext + +## Basic types used in the representation of multiprecision integers. +nodist_archinclude_HEADERS += mptypes.h +BUILT_SOURCES += mptypes.h +CLEANFILES += mptypes.h +noinst_PROGRAMS += mptypes +mptypes.h: mptypes$e + $(AM_V_GEN)./mptypes >mptypes.h.new && mv mptypes.h.new mptypes.h + +## Low-level multiprecision arithmetic. +pkginclude_HEADERS += mpx.h bitops.h mpw.h +libmpbase_la_SOURCES += mpx.c +TESTS += mpx.$t +libmpbase_la_SOURCES += karatsuba.h mpx-kmul.c mpx-ksqr.c +TESTS += mpx-kmul.$t mpx-ksqr.$t +noinst_PROGRAMS += bittest +TESTS += bittest +EXTRA_DIST += tests/mpx + +## A quick-and-dirty parser, used for parsing descriptions of groups, fields, +## etc. +pkginclude_HEADERS += rho.h +libcatacomb_la_SOURCES += rho.c +TESTS += rho.$t + +## Pollard's `rho' algorithm for determining discrete logarithms. +pkginclude_HEADERS += qdparse.h +libcatacomb_la_SOURCES += qdparse.c + +###-------------------------------------------------------------------------- +### Prime number checking, searching, and related jobs. + +## Generating Lim--Lee groups, i.e., unit groups of finite fields without +## small subgroups (except for the obvious ones). +pkginclude_HEADERS += limlee.h +libcatacomb_la_SOURCES += limlee.c + +## A table of small prime numbers. +nodist_pkginclude_HEADERS += primetab.h +nodist_libcatacomb_la_SOURCES += primetab.c +CLEANFILES += primetab.h primetab.c +BUILT_SOURCES += primetab.h primetab.c +noinst_PROGRAMS += genprimes +primetab.h: primetab.c +primetab.c: genprimes$e + $(AM_V_GEN)./genprimes -hprimetab.h -cprimetab.c \ + -sCATACOMB_PRIMETAB_H \ + -n256 -t"unsigned short" -iprimetab + +## Filtering candidate prime numbers by checking for small factors +## efficiently. +pkginclude_HEADERS += pfilt.h +libcatacomb_la_SOURCES += pfilt.c + +## Generating prime numbers (and other kinds of numbers which need searching +## for). +pkginclude_HEADERS += pgen.h +libcatacomb_la_SOURCES += pgen.c +libcatacomb_la_SOURCES += pgen-gcd.c +libcatacomb_la_SOURCES += pgen-simul.c +libcatacomb_la_SOURCES += pgen-stdev.c +TESTS += pgen.$t +EXTRA_DIST += tests/pgen + +## Finding primitive elements in finite fields. +pkginclude_HEADERS += prim.h +libcatacomb_la_SOURCES += prim.c + +## Iterating over all prime numbers from a given starting point. +pkginclude_HEADERS += primeiter.h +libcatacomb_la_SOURCES += primeiter.c +TESTS += primeiter.$t +primeiter.lo: wheel.h + +## The Miller--Rabin primality test. +pkginclude_HEADERS += rabin.h +libcatacomb_la_SOURCES += rabin.c + +## Finding `strong' primes, using Gordon's algorithm. Once upon a time, +## products of these kinds of numbers were harder to factor. +pkginclude_HEADERS += strongprime.h +libcatacomb_la_SOURCES += strongprime.c + +## A `wheel', used by the prime iteration machinery. +nodist_pkginclude_HEADERS += wheel.h +nodist_libcatacomb_la_SOURCES += wheel.c +CLEANFILES += wheel.h wheel.c +noinst_PROGRAMS += genwheel +wheel.h: wheel.c +wheel.c: genwheel$e + $(AM_V_GEN)./genwheel -hwheel.h -cwheel.c \ + -sCATACOMB_WHEEL_H \ + -n5 -t"unsigned char" -iwheel + +###-------------------------------------------------------------------------- +### Binary polynomial arithmetic. + +## User-visible binary polynomial arithmetic. +pkginclude_HEADERS += gf.h +libcatacomb_la_SOURCES += gf-arith.c +TESTS += gf-arith.$t +libcatacomb_la_SOURCES += gf-exp.c gf-exp.h +libcatacomb_la_SOURCES += gf-gcd.c +TESTS += gf-gcd.$t +EXTRA_DIST += tests/gf + +## Low-level binary polynomial arithmetic. +pkginclude_HEADERS += gfx.h +libcatacomb_la_SOURCES += gfx.c +TESTS += gfx.$t +libcatacomb_la_SOURCES += gfx-kmul.c +TESTS += gfx-kmul.$t +libcatacomb_la_SOURCES += gfx-sqr.c +gfx-sqr.lo: gfx-sqr-tab.h +TESTS += gfx-sqr.$t +CLEANFILES += gfx-sqr-tab.h +noinst_PROGRAMS += gfx-sqr-mktab +gfx-sqr-tab.h: gfx-sqr-mktab$e + $(AM_V_GEN)./gfx-sqr-mktab >gfx-sqr-tab.h.in && \ + mv gfx-sqr-tab.h.in gfx-sqr-tab.h +EXTRA_DIST += tests/gfx + +## Conversions between normal and polynomial basis representations for binary +## fields. +pkginclude_HEADERS += gfn.h +libcatacomb_la_SOURCES += gfn.c +TESTS += gfn.$t +EXTRA_DIST += tests/gfn + +## Efficient reduction modulo sparse polynomials. +pkginclude_HEADERS += gfreduce.h +libcatacomb_la_SOURCES += gfreduce.c gfreduce-exp.h +TESTS += gfreduce.$t +EXTRA_DIST += tests/gfreduce + +###-------------------------------------------------------------------------- +### Abstractions for various kinds of algebraic objects. + +## Abstract cyclic groups. +pkginclude_HEADERS += group.h group-guts.h +libcatacomb_la_SOURCES += group-dstr.c +libcatacomb_la_SOURCES += group-exp.c group-exp.h +libcatacomb_la_SOURCES += group-file.c +libcatacomb_la_SOURCES += group-parse.c +libcatacomb_la_SOURCES += group-stdops.c +libcatacomb_la_SOURCES += group-string.c +libcatacomb_la_SOURCES += g-bin.c +libcatacomb_la_SOURCES += g-prime.c +libcatacomb_la_SOURCES += g-ec.c +EXTRA_DIST += group-test.c +TESTS += group-test.$t +EXTRA_DIST += tests/group + +## Abstract finite fields. +pkginclude_HEADERS += field.h field-guts.h +libcatacomb_la_SOURCES += field.c +libcatacomb_la_SOURCES += field-exp.c field-exp.h +libcatacomb_la_SOURCES += field-parse.c +libcatacomb_la_SOURCES += f-binpoly.c +libcatacomb_la_SOURCES += f-niceprime.c +libcatacomb_la_SOURCES += f-prime.c + +## Table of built-in binary fields. +pkginclude_HEADERS += bintab.h +libcatacomb_la_SOURCES += bintab.c +CLEANFILES += bintab.c +EXTRA_DIST += bintab.in bin-gentab.awk +bintab.c: bintab.in bin-gentab.awk mpdump$e + $(AM_V_GEN)awk -f $(srcdir)/bin-gentab.awk \ + <$(srcdir)/bintab.in >bintab.c.new && \ + mv bintab.c.new bintab.c + +## Table of built-in prime fields. +pkginclude_HEADERS += ptab.h +libcatacomb_la_SOURCES += ptab.c +CLEANFILES += ptab.c +EXTRA_DIST += ptab.in p-gentab.awk +ptab.c: ptab.in p-gentab.awk mpdump$e + $(AM_V_GEN)awk -f $(srcdir)/p-gentab.awk \ + <$(srcdir)/ptab.in >ptab.c.new && \ + mv ptab.c.new ptab.c + +## A utility for building multiprecision integer constants. +noinst_PROGRAMS += mpdump +mpdump_LDADD = libmpbase.la +$(mpdump_OBJECTS): mptypes.h + +###-------------------------------------------------------------------------- +### Elliptic curve arithmetic. + +## Basic elliptic curve arithmetic. +pkginclude_HEADERS += ec.h ec-guts.h +libcatacomb_la_SOURCES += ec.c +libcatacomb_la_SOURCES += ec-exp.c ec-exp.h +libcatacomb_la_SOURCES += ec-info.c +TESTS += ec-info.$t +libcatacomb_la_SOURCES += ec-bin.c +TESTS += ec-bin.$t +libcatacomb_la_SOURCES += ec-prime.c +TESTS += ec-prime.$t +EXTRA_DIST += tests/ec + +## The standard `raw' encoding (`EC2OSP') of elliptic curve points. +pkginclude_HEADERS += ec-raw.h +libcatacomb_la_SOURCES += ec-raw.c + +## Test infrastructure for elliptic curves. +pkginclude_HEADERS += ec-test.h +libcatacomb_la_SOURCES += ec-test.c +TESTS += ec-test.$t + +## A table of built-in elliptic curves. +pkginclude_HEADERS += ectab.h +libcatacomb_la_SOURCES += ectab.c +CLEANFILES += ectab.c +EXTRA_DIST += ectab.in ec-gentab.awk +ectab.c: ectab.in ec-gentab.awk mpdump$e + $(AM_V_GEN)awk -f $(srcdir)/ec-gentab.awk \ + <$(srcdir)/ectab.in >ectab.c.new && \ + mv ectab.c.new ectab.c + +###-------------------------------------------------------------------------- +### Autogenerated lists. + +## Fancy template substitutions. +multigen = python $(srcdir)/multigen +EXTRA_DIST += multigen + +## The heart of this is an enormous cross-product of crypto primitives and +## the corresponding modes of operation. Rather than write it out longhand, +## we generate it using `multigen'. Unfortunately, this needs to be done +## at the Automake level, which causes some interesting bootstrapping +## problems. +include modes.am + +EXTRA_DIST += modes.am.in modes.am +MAINTAINERCLEANFILES += $(srcdir)/modes.am + +## Generate the lists. +$(srcdir)/modes.am: modes.am.in + $(AM_V_GEN)$(multigen) -g $(srcdir)/modes.am.in $(srcdir)/modes.am \ + blkc="$(BLKCS)" \ + blkcmode="$(BLKCMODES)" \ + blkcciphermode="$(BLKCCIPHERMODES)" \ + hash="$(HASHES)" \ + hashmode="$(HASHMODES)" \ + hashciphermode="$(HASHCIPHERMODES)" \ + hashmacmode="$(HASHMACMODES)" + +## Initialize lists of known classes. +ALL_CIPHERS = $(CIPHER_MODES) +ALL_HASHES = $(HASHES) +ALL_MACS = $(MAC_MODES) + +###-------------------------------------------------------------------------- +### Block ciphers. + +BLKCS = +BLKCMODES = + +BLKCCIPHERMODES = +BLKCMODES += $(BLKCCIPHERMODES) + +## A tool for translating the AES-contest test vectors into a form our test +## rigs understand. +EXTRA_DIST += tests/aes-trans + +## Block cipher utility macros, mainly used in mode implementations. +pkginclude_HEADERS += blkc.h + +## Source code and headers for the block ciphers. +libcatacomb_la_SOURCES += $(BLKC_C) +pkginclude_HEADERS += $(BLKC_H) + +## Schneier's `Blowfish' block cipher. +BLKCS += blowfish +blowfish.lo: blowfish-tab.h +CLEANFILES += blowfish-tab.h +noinst_PROGRAMS += blowfish-mktab +blowfish-tab.h: blowfish-mktab$e + $(AM_V_GEN)./blowfish-mktab >blowfish-tab.h.new && \ + mv blowfish-tab.h.new blowfish-tab.h + +## Adams and Tavares' `CAST' block ciphers. +BLKCS += cast128 cast256 +libcatacomb_la_SOURCES += cast-s.c cast-sk.c cast-base.h cast-tab.h +cast256.$t: tests/cast256 +EXTRA_DIST += tests/cast256.aes +MAINTAINERCLEANFILES += $(srcdir)/tests/cast256 +tests/cast256: tests/cast256.aes + $(AM_V_GEN)$(srcdir)/tests/aes-trans CAST256 \ + <$(srcdir)/tests/cast256.aes \ + >$(srcdir)/tests/cast256.new && \ + mv $(srcdir)/tests/cast256.new $(srcdir)/tests/cast256 + +## IBM's `DES' block cipher, by Feistel, Coppersmith, and others. +BLKCS += des des3 +libcatacomb_la_SOURCES += des-base.h des-base.c desx-tab.h +des-base.lo: des-tab.h +CLEANFILES += des-tab.h +noinst_PROGRAMS += des-mktab +des-tab.h: des-mktab$e + $(AM_V_GEN)./des-mktab >des-tab.h.new && \ + mv des-tab.h.new des-tab.h + +## Rivest's `DESX' variant, with pre- and post-whitening. +BLKCS += desx +libcatacomb_la_SOURCES += desx-tab.h + +## Lai and Massey's IDEA. +BLKCS += idea + +## IBM's `MARS' block cipher. +BLKCS += mars +mars.lo: mars-tab.h +CLEANFILES += mars-tab.h +noinst_PROGRAMS += mars-mktab +mars-tab.h: mars-mktab$e + $(AM_V_GEN)./mars-mktab >mars-tab.h.new && \ + mv mars-tab.h.new mars-tab.h +mars.$t: tests/mars +EXTRA_DIST += tests/mars.aes +MAINTAINERCLEANFILES += $(srcdir)/tests/mars +tests/mars: tests/mars.aes + $(AM_V_GEN)$(srcdir)/tests/aes-trans Mars \ + <$(srcdir)/tests/mars.aes \ + >$(srcdir)/tests/mars.new && \ + mv $(srcdir)/tests/mars.new $(srcdir)/tests/mars + +## Daemen, Peeters, Van Assche and Rijmen's `Noekeon'. +BLKCS += noekeon + +## Rivest's `RC2' block cipher. +BLKCS += rc2 +libcatacomb_la_SOURCES += rc2-tab.h + +## Rivest's `RC5'. +BLKCS += rc5 + +## Daemen and Rijmen's `Rijndael' block cipher, selected as AES. +BLKCS += rijndael rijndael192 rijndael256 +libcatacomb_la_SOURCES += rijndael-base.h rijndael-base.c +rijndael-base.lo: rijndael-tab.h +CLEANFILES += rijndael-tab.h +noinst_PROGRAMS += rijndael-mktab +rijndael-tab.h: rijndael-mktab$e + $(AM_V_GEN)./rijndael-mktab >rijndael-tab.h.new && \ + mv rijndael-tab.h.new rijndael-tab.h +rijndael.$t: tests/rijndael +EXTRA_DIST += tests/rijndael.aes +MAINTAINERCLEANFILES += $(srcdir)/tests/rijndael +tests/rijndael: tests/rijndael.aes + $(AM_V_GEN)$(srcdir)/tests/aes-trans Rijndael \ + <$(srcdir)/tests/rijndael.aes \ + >$(srcdir)/tests/rijndael.new && \ + mv $(srcdir)/tests/rijndael.new $(srcdir)/tests/rijndael + +## Massey's `SAFER' block ciphers. +BLKCS += safer safersk +safer.lo: safer-tab.h +CLEANFILES += safer-tab.h +noinst_PROGRAMS += safer-mktab +safer-tab.h: safer-mktab$e + $(AM_V_GEN)./safer-mktab >safer-tab.h.new && \ + mv safer-tab.h.new safer-tab.h + +## Anderson, Biham and Knudsen's `Serpent' block cipher. +BLKCS += serpent +libcatacomb_la_SOURCES += serpent-sbox.h +noinst_PROGRAMS += serpent-check +TESTS += serpent-check +serpent.$t: tests/serpent +EXTRA_DIST += tests/serpent.aes +MAINTAINERCLEANFILES += $(srcdir)/tests/serpent +tests/serpent: tests/serpent.aes + $(AM_V_GEN)$(srcdir)/tests/aes-trans Serpent -v rev=1 \ + <$(srcdir)/tests/serpent.aes \ + >$(srcdir)/tests/serpent.new && \ + mv $(srcdir)/tests/serpent.new $(srcdir)/tests/serpent + +## The National Security Agency's `Skipjack' block cipher. You don't want to +## use this. +BLKCS += skipjack +libcatacomb_la_SOURCES += skipjack-tab.h + +## Daemen and Rijmen's `Square' block cipher. +BLKCS += square +square.lo: square-tab.h +CLEANFILES += square-tab.h +noinst_PROGRAMS += square-mktab +square-tab.h: square-mktab$e + $(AM_V_GEN)./square-mktab >square-tab.h.new && \ + mv square-tab.h.new square-tab.h + +## Wheeler and Needham's `TEA' and `XTEA' block ciphers. +BLKCS += tea xtea + +## Schneier, Kelsey, Whiting, Wagner, Hall and Ferguson's `Twofish' block +## cipher. +BLKCS += twofish +twofish.lo: twofish-tab.h +CLEANFILES += twofish-tab.h +noinst_PROGRAMS += twofish-mktab +twofish-tab.h: twofish-mktab$e + $(AM_V_GEN)./twofish-mktab >twofish-tab.h.new && \ + mv twofish-tab.h.new twofish-tab.h +twofish.$t: tests/twofish +EXTRA_DIST += tests/twofish.aes +MAINTAINERCLEANFILES += $(srcdir)/tests/twofish +tests/twofish: tests/twofish.aes + $(AM_V_GEN)$(srcdir)/tests/aes-trans Twofish \ + <$(srcdir)/tests/twofish.aes \ + >$(srcdir)/tests/twofish.new && \ + mv $(srcdir)/tests/twofish.new $(srcdir)/tests/twofish + +## The old NIST modes for DES. +BLKCCIPHERMODES += cbc cfb ecb ofb + +## Counter mode. +BLKCCIPHERMODES += counter + +###-------------------------------------------------------------------------- +### Hash functions. + +HASHES = +HASHMODES = + +HASHCIPHERMODES = +HASHMODES += $(HASHCIPHERMODES) + +HASHMACMODES = +HASHMODES += $(HASHMACMODES) + +## Common definitions for hash functions. +pkginclude_HEADERS += hash.h + +## Source code and headers for the hash functions. +libcatacomb_la_SOURCES += $(HASH_C) +pkginclude_HEADERS += $(HASH_H) + +## Lim and KISA's `HAS-160', recommended for use with KCDSA. +HASHES += has160 + +## Rivest's `MD' series of hash functions +HASHES += md2 md4 md5 +libcatacomb_la_SOURCES += md2-tab.h + +## Dobbertin, Bosselaers and Preneel's `RIPEMD' suite. +HASHES += rmd128 rmd160 rmd256 rmd320 + +## The National Security Agency's `SHA-1' hash function. +HASHES += sha + +## The National Security Agency's `SHA-2' suite. +HASHES += sha224 sha256 +HASHES += sha384 sha512 + +## Anderson and Biham's `Tiger' hash function. +HASHES += tiger +libcatacomb_la_SOURCES += tiger-base.h +tiger.lo: tiger-tab.h +CLEANFILES += tiger-tab.h +noinst_PROGRAMS += tiger-mktab +tiger-tab.h: tiger-mktab$e + $(AM_V_GEN)./tiger-mktab >tiger-tab.h.new && \ + mv tiger-tab.h.new tiger-tab.h + +## Barreto and Rijmen's `Whirlpool' hash function. +HASHES += whirlpool whirlpool256 +whirlpool.lo: whirlpool-tab.h +CLEANFILES += whirlpool-tab.h +noinst_PROGRAMS += whirlpool-mktab +whirlpool-tab.h: whirlpool-mktab$e + $(AM_V_GEN)./whirlpool-mktab >whirlpool-tab.h.new && \ + mv whirlpool-tab.h.new whirlpool-tab.h + +## Bellare, Canetti and Krawczyk's `HMAC' mode for message authentication. +HASHMACMODES += hmac + +## MGF1, used in OAEP and PSS. +HASHCIPHERMODES += mgf + +###-------------------------------------------------------------------------- +### Other symmetric primitives. + +## The CRC32 algorithm, which is useful, but has no worthwhile security. +pkginclude_HEADERS += crc32.h +libcatacomb_la_SOURCES += crc32.c +ALL_HASHES += crc32=gcrc32 + +## Rivest's `RC4' stream cipher. +pkginclude_HEADERS += rc4.h +libcatacomb_la_SOURCES += rc4.c +TESTS += rc4.$t +EXTRA_DIST += tests/rc4 +ALL_CIPHERS += rc4 + +## Coppersmith and Rogaway's `SEAL' pseudorandom function. +pkginclude_HEADERS += seal.h +libcatacomb_la_SOURCES += seal.c +TESTS += seal.$t +EXTRA_DIST += tests/seal +ALL_CIPHERS += seal +###-------------------------------------------------------------------------- +### Autogenerated mode implementations. + +## The master stamp file, indicating that we generated all of the sources. +CLEANFILES += modes-gen-stamp +EXTRA_DIST += mode.h.in mode.c.in +modes-gen-stamp: + $(AM_V_at)touch modes-gen-stamp + $(AM_V_GEN)$(multigen) -g $(srcdir)/mode.c.in \ + @base-@mode.c \ + base="$(BLKCS)" mode="$(BLKCMODES)" + $(AM_V_at)$(multigen) -g $(srcdir)/mode.c.in \ + @base-@mode.c \ + base="$(HASHES)" mode="$(HASHMODES)" + $(AM_V_at)$(multigen) -g $(srcdir)/mode.h.in \ + @base-@mode.h \ + base="$(BLKCS)" mode="$(BLKCMODES)" + $(AM_V_at)$(multigen) -g $(srcdir)/mode.h.in \ + @base-@mode.h \ + base="$(HASHES)" mode="$(HASHMODES)" + $(AM_V_at)touch modes-gen-stamp + +## The individual mode interfaces and implementations. +pkginclude_HEADERS += $(MODE_H) + +## Generated implementations. +BUILT_SOURCES += $(GENMODES_C) +CLEANFILES += $(GENMODES_C) +nodist_libcatacomb_la_SOURCES += $(GENMODES_C) +$(GENMODES_C): modes-gen-stamp + +## Generated interfaces. +BUILT_SOURCES += $(GENMODES_H) +CLEANFILES += $(GENMODES_H) +nodist_pkginclude_HEADERS += $(GENMODES_H) +$(GENMODES_H): modes-gen-stamp + +###-------------------------------------------------------------------------- +### Tables of classes for encryption, hashing, and message authentication. + +## The skeleton for the class tables. +EXTRA_DIST += gthingtab.c.in + +## Table of cipher classes. +pkginclude_HEADERS += gcipher.h +CLEANFILES += gciphertab.c +nodist_libcatacomb_la_SOURCES += gciphertab.c +gciphertab.c: gthingtab.c.in + $(AM_V_GEN)$(multigen) -g $(srcdir)/gthingtab.c.in gciphertab.c \ + what=gcipher cls=gccipher thing="$(ALL_CIPHERS)" + +## Table of hash classes. +pkginclude_HEADERS += ghash.h ghash-def.h +CLEANFILES += ghashtab.c +nodist_libcatacomb_la_SOURCES += ghashtab.c +ghashtab.c: gthingtab.c.in + $(AM_V_GEN)$(multigen) -g $(srcdir)/gthingtab.c.in ghashtab.c \ + what=ghash cls=gchash thing="$(ALL_HASHES)" + +## Table of MAC classes. +pkginclude_HEADERS += gmac.h +CLEANFILES += gmactab.c +nodist_libcatacomb_la_SOURCES += gmactab.c +gmactab.c: gthingtab.c.in + $(AM_V_GEN)$(multigen) -g $(srcdir)/gthingtab.c.in gmactab.c \ + what=gmac cls=gcmac thing="$(ALL_MACS)" + +###-------------------------------------------------------------------------- +### Testing for symmetric crypto things. + +## Run the test programs. +TESTS += $(SYMM_TESTS) +EXTRA_DIST += $(SYMM_TEST_FILES) + +## A piece of sample text for round-trip testing encryption modes. +EXTRA_DIST += daftstory.h + +###-------------------------------------------------------------------------- +### Key management. + +## Assistance for elliptic-curve keys. +pkginclude_HEADERS += ec-keys.h +libcatacomb_la_SOURCES += ec-fetch.c + +## Managing keys and keyring files. +pkginclude_HEADERS += key.h +libcatacomb_la_SOURCES += key-attr.c +libcatacomb_la_SOURCES += key-fetch.c +libcatacomb_la_SOURCES += key-file.c +libcatacomb_la_SOURCES += key-io.c +libcatacomb_la_SOURCES += key-misc.c +libcatacomb_la_SOURCES += key-moan.c + +## Managing key data. +pkginclude_HEADERS += key-data.h +libcatacomb_la_SOURCES += key-binary.c +libcatacomb_la_SOURCES += key-data.c +libcatacomb_la_SOURCES += key-flags.c +libcatacomb_la_SOURCES += key-pack.c +libcatacomb_la_SOURCES += key-pass.c +libcatacomb_la_SOURCES += key-text.c + +## Error reporting. +pkginclude_HEADERS += key-error.h +libcatacomb_la_SOURCES += key-error.c + +## Reading passphrases. +pkginclude_HEADERS += passphrase.h +libcatacomb_la_SOURCES += passphrase.c + +## Interfacing with the passphrase pixie. +pkginclude_HEADERS += pixie.h +libcatacomb_la_SOURCES += pixie-common.c + +###-------------------------------------------------------------------------- +### Secret sharing. + +## Efficient sharing over GF(2^8). +pkginclude_HEADERS += gfshare.h +libcatacomb_la_SOURCES += gfshare.c +gfshare.lo: gfshare-tab.h +CLEANFILES += gfshare-tab.h +noinst_PROGRAMS += gfshare-mktab +gfshare-tab.h: gfshare-mktab$e + $(AM_V_GEN)./gfshare-mktab >gfshare-tab.h.new && \ + mv gfshare-tab.h.new gfshare-tab.h +TESTS += gfshare.$t + +## Number-theoretic sharing over GF(p). +pkginclude_HEADERS += share.h +libcatacomb_la_SOURCES += share.c +TESTS += share.$t + +###-------------------------------------------------------------------------- +### Public-key cryptography. + +## The Blum--Blum--Shub random-bit generator. +pkginclude_HEADERS += bbs.h +libcatacomb_la_SOURCES += bbs-fetch.c +libcatacomb_la_SOURCES += bbs-gen.c +libcatacomb_la_SOURCES += bbs-jump.c +TESTS += bbs-jump.$t +libcatacomb_la_SOURCES += bbs-rand.c +TESTS += bbs-rand.$t +EXTRA_DIST += tests/bbs + +## Plain Diffie--Hellman, in Schorr groups. +pkginclude_HEADERS += dh.h +libcatacomb_la_SOURCES += dh-check.c +libcatacomb_la_SOURCES += dh-fetch.c +libcatacomb_la_SOURCES += dh-gen.c +libcatacomb_la_SOURCES += dh-kcdsa.c +libcatacomb_la_SOURCES += dh-limlee.c +libcatacomb_la_SOURCES += dh-param.c +TESTS += dh-param.$t + +## The National Security Agency's Digital Signature Algorithm. +pkginclude_HEADERS += dsa.h +libcatacomb_la_SOURCES += dsa-gen.c +TESTS += dsa-gen.$t +libcatacomb_la_SOURCES += dsa-misc.c +libcatacomb_la_SOURCES += dsa-sign.c +TESTS += dsa-sign.$t +libcatacomb_la_SOURCES += dsa-verify.c +TESTS += dsa-verify.$t +libcatacomb_la_SOURCES += dsa-check.c +EXTRA_DIST += tests/dsa + +## Generalization of DSA to arbitrary cyclic groups. +pkginclude_HEADERS += gdsa.h +libcatacomb_la_SOURCES += gdsa.c +TESTS += gdsa.$t +EXTRA_DIST += tests/gdsa + +## KISA `KCDSA', generalized to arbitrary cyclic groups. +pkginclude_HEADERS += gkcdsa.h +libcatacomb_la_SOURCES += gkcdsa.c +TESTS += gkcdsa.$t +EXTRA_DIST += tests/gkcdsa + +## General key validity checking machinery. +pkginclude_HEADERS += keycheck.h +libcatacomb_la_SOURCES += keycheck.c +libcatacomb_la_SOURCES += keycheck-mp.c +libcatacomb_la_SOURCES += keycheck-report.c + +## The Rivest--Shamir--Adleman trapdoor one-way function. +pkginclude_HEADERS += rsa.h +libcatacomb_la_SOURCES += rsa-fetch.c +libcatacomb_la_SOURCES += rsa-gen.c +libcatacomb_la_SOURCES += rsa-priv.c +libcatacomb_la_SOURCES += rsa-pub.c +libcatacomb_la_SOURCES += rsa-recover.c +libcatacomb_la_SOURCES += oaep.c +libcatacomb_la_SOURCES += pkcs1.c +libcatacomb_la_SOURCES += pss.c +EXTRA_DIST += rsa-test.c +TESTS += rsa-test.$t +EXTRA_DIST += tests/rsa + +###-------------------------------------------------------------------------- +### Random number generators. + +## The FIPS186 generator used to generate DSA domain parameters. +pkginclude_HEADERS += dsarand.h +libcatacomb_la_SOURCES += dsarand.c + +## Knuth's lagged-Fibonacci generator. +pkginclude_HEADERS += fibrand.h +libcatacomb_la_SOURCES += fibrand.c + +## The FIPS 140--2 random number generator tests. +pkginclude_HEADERS += fipstest.h +libcatacomb_la_SOURCES += fipstest.c + +## Interface for generic random number sources. +pkginclude_HEADERS += grand.h +libcatacomb_la_SOURCES += grand.c + +## A simple linear-congruential generator. +pkginclude_HEADERS += lcrand.h +libcatacomb_la_SOURCES += lcrand.c +TESTS += lcrand.$t +EXTRA_DIST += tests/lcrand + +## Maurer's universal statistical test. +pkginclude_HEADERS += maurer.h +libcatacomb_la_SOURCES += maurer.c + +## System-specific noise acquisition. +pkginclude_HEADERS += noise.h +libcatacomb_la_SOURCES += noise.c + +## Cryptographic laundering for true random data generation. +pkginclude_HEADERS += rand.h +libcatacomb_la_SOURCES += rand.c + +## The SSL v3 pseudorandom function. +pkginclude_HEADERS += sslprf.h +libcatacomb_la_SOURCES += sslprf.c +TESTS += sslprf.$t +EXTRA_DIST += tests/sslprf + +## The TLS v1 pseudorandom function. +pkginclude_HEADERS += tlsprf.h +libcatacomb_la_SOURCES += tlsprf.c +TESTS += tlsprf.$t +EXTRA_DIST += tests/tlsprf + +###-------------------------------------------------------------------------- +### The `catcrypt' library. + +noinst_LTLIBRARIES += libcatcrypt.la +libcatcrypt_la_SOURCES = + +## The main library. +libcatcrypt_la_SOURCES += cc.h +libcatcrypt_la_SOURCES += cc-enc.c +libcatcrypt_la_SOURCES += cc-hash.c +libcatcrypt_la_SOURCES += cc-kem.c +libcatcrypt_la_SOURCES += cc-list.c +libcatcrypt_la_SOURCES += cc-progress.c +libcatcrypt_la_SOURCES += cc-sig.c +libcatcrypt_la_SOURCES += cc-subcmd.c + +## Date parsing. +libcatcrypt_la_SOURCES += getdate.h +libcatcrypt_la_SOURCES += getdate.y + +###-------------------------------------------------------------------------- +### Utility programs. + +UTILS_LIBS = libcatcrypt.la libcatacomb.la $(LIBS) + +## Generate and verify datestamped cookies. +bin_PROGRAMS += cookie +cookie_LDADD = $(UTILS_LIBS) +dist_man_MANS += cookie.1 + +## Asymmetric message encryption and decryption with deniable authentication. +bin_PROGRAMS += catcrypt +catcrypt_LDADD = $(UTILS_LIBS) +dist_man_MANS += catcrypt.1 + +## Signing and verifying files. +bin_PROGRAMS += catsign +catsign_LDADD = $(UTILS_LIBS) +dist_man_MANS += catsign.1 + +## Issue and verify signatures on directory trees. +bin_PROGRAMS += dsig +dsig_LDADD = $(UTILS_LIBS) +dist_man_MANS += dsig.1 + +## Compute factorials to arbitrary precision. +bin_PROGRAMS += factorial +factorial_LDADD = $(UTILS_LIBS) + +## Compute Fibonacci numbers to arbitrary precision. +bin_PROGRAMS += fibonacci +fibonacci_LDADD = $(UTILS_LIBS) + +## Compute hashes of files. +bin_PROGRAMS += hashsum +hashsum_LDADD = $(UTILS_LIBS) +dist_man_MANS += hashsum.1 + +## Key management utility. +bin_PROGRAMS += key +key_SOURCES = keyutil.c +key_LDADD = $(UTILS_LIBS) +dist_man_MANS += key.1 keyring.5 + +## Generate passphrases with given entropy using wordlists and Markov models. +bin_PROGRAMS += mkphrase +mkphrase_LDADD = $(UTILS_LIBS) +dist_man_MANS += mkphrase.1 + +## Performance testing. +bin_PROGRAMS += perftest +perftest_LDADD = $(UTILS_LIBS) + +## Remember passphrases for limited periods of time. +bin_PROGRAMS += pixie +pixie_SOURCES = pixie.c +pixie_LDADD = libcatacomb.la +dist_man_MANS += pixie.1 +EXTRA_DIST += xpixie + +## Generate random data. +bin_PROGRAMS += rspit +rspit_LDADD = $(UTILS_LIBS) + +###-------------------------------------------------------------------------- +### Testing. + +SUFFIXES += .c .$t .to +.c.to: + $(AM_V_CC)$(COMPILE) -c -DTEST_RIG -DSRCDIR=\"$(srcdir)\" $< -o $@ +.to.$t: libcatacomb.la + $(AM_V_CCLD)$(LINK) $< libcatacomb.la $(LIBS) +.PRECIOUS: %.to +CLEANFILES += *.to *.$t + +###-------------------------------------------------------------------------- +### The pkg-config file. + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = catacomb.pc +EXTRA_DIST += catacomb.pc.in +CLEANFILES += catacomb.pc + +catacomb.pc: catacomb.pc.in Makefile + $(SUBST) $(srcdir)/catacomb.pc.in >$@.new $(SUBSTITUTIONS) && \ + mv $@.new $@ + +###-------------------------------------------------------------------------- +### Release tweaking. + +## Release number. +dist-hook:: + echo $(VERSION) >$(distdir)/RELEASE + +## Additional build tools. +EXTRA_DIST += auto-version + +###-------------------------------------------------------------------------- +### Debian. + +## General stuff. +EXTRA_DIST += debian/rules +EXTRA_DIST += debian/control +EXTRA_DIST += debian/changelog +EXTRA_DIST += debian/copyright + +## catacomb-bin +EXTRA_DIST += debian/catacomb-bin.prerm +EXTRA_DIST += debian/catacomb-bin.postinst +EXTRA_DIST += debian/catacomb-bin.config +EXTRA_DIST += debian/catacomb-bin.templates + +###----- That's all, folks --------------------------------------------------