configure.ac: Replace with a new version.
[u/mdw/catacomb] / Makefile.am
CommitLineData
7db733d4
MW
1### -*-makefile-*-
2###
3### Build script for Catacomb
4###
5### (c) 2013 Straylight/Edgeware
6###
7
8###----- Licensing notice ---------------------------------------------------
9###
10### This file is part of Catacomb.
11###
12### Catacomb is free software; you can redistribute it and/or modify
13### it under the terms of the GNU Library General Public License as
14### published by the Free Software Foundation; either version 2 of the
15### License, or (at your option) any later version.
16###
17### Catacomb is distributed in the hope that it will be useful,
18### but WITHOUT ANY WARRANTY; without even the implied warranty of
19### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20### GNU Library General Public License for more details.
21###
22### You should have received a copy of the GNU Library General Public
23### License along with Catacomb; if not, write to the Free
24### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
25### MA 02111-1307, USA.
26
27###--------------------------------------------------------------------------
28### Miscellaneous useful definitions.
29
30## Some convenient abbreviations for file suffixes.
31e = $(EXEEXT)
32o = $(OBJEXT)
33t = t$e
34
35## Installation directories.
36archincludedir = $(pkglibdir)/include
37
38###--------------------------------------------------------------------------
39### Initial values of common variables.
40
41SUBDIRS =
42
43EXTRA_DIST =
44CLEANFILES =
45DISTCLEANFILES =
46MAINTAINERCLEANFILES =
47SUFFIXES =
48TESTS =
49BUILT_SOURCES =
50
51bin_PROGRAMS =
52noinst_PROGRAMS =
53lib_LTLIBRARIES =
54noinst_LTLIBRARIES =
55pkginclude_HEADERS =
56nodist_pkginclude_HEADERS =
57archinclude_HEADERS =
58nodist_archinclude_HEADERS =
59dist_man_MANS =
60
61###--------------------------------------------------------------------------
62### Standard configuration substitutions.
63
64## Substitute tags in files.
ba6e6b64
MW
65confsubst = $(top_srcdir)/config/confsubst
66EXTRA_DIST += config/confsubst
7db733d4
MW
67
68SUBSTITUTIONS = \
69 prefix=$(prefix) exec_prefix=$(exec_prefix) \
70 libdir=$(libdir) includedir=$(includedir) \
ba6e6b64
MW
71 PACKAGE=$(PACKAGE) VERSION=$(VERSION) \
72 CATACOMB_LIBS="$(CATACOMB_LIBS)"
7db733d4
MW
73
74V_SUBST = $(V_SUBST_$(V))
75V_SUBST_ = $(V_SUBST_$(AM_DEFAULT_VERBOSITY))
76V_SUBST_0 = @echo " SUBST $@";
77SUBST = $(V_SUBST)$(confsubst)
78
79###--------------------------------------------------------------------------
80### The main library.
81
82lib_LTLIBRARIES += libcatacomb.la
ba6e6b64 83libcatacomb_la_LIBADD = $(CATACOMB_LIBS) $(mLib_LIBS)
7db733d4
MW
84libcatacomb_la_LDFLAGS = -version-info $(LIBTOOL_VERSION_INFO)
85libcatacomb_la_SOURCES =
86nodist_libcatacomb_la_SOURCES =
87
88###--------------------------------------------------------------------------
89### Basic utilities.
90
91## The locked-memory arena.
92pkginclude_HEADERS += arena.h
93libcatacomb_la_SOURCES += arena.c
94
95## Constant-type operations.
96pkginclude_HEADERS += ct.h
97libcatacomb_la_SOURCES += ct.c
98
99## Acceptable key-size descriptions.
100pkginclude_HEADERS += keysz.h
101libcatacomb_la_SOURCES += keysz.c keysz-conv.c
102
103## System-level memory locking.
104pkginclude_HEADERS += lmem.h
105libcatacomb_la_SOURCES += lmem.c
106
107## Clearing secrets from memory.
108pkginclude_HEADERS += paranoia.h
109
110###--------------------------------------------------------------------------
111### Main multiprecision integer library.
112
113## This library is unfortunately intertwined with some of the code generation
114## programs, so we must be rather careful. The important bits of the maths
115## library needed by these programs is separated out into `libmpbase'. There
116## is work going on to fix this unpleasant situation by generating the
117## relevant files from Python scripts rather than C programs, using
118## information gathered by `configure'.
119noinst_LTLIBRARIES += libmpbase.la
120libcatacomb_la_LIBADD += libmpbase.la
ba6e6b64 121libmpbase_la_LIBADD = $(mLib_LIBS)
7db733d4
MW
122libmpbase_la_SOURCES =
123$(libmpbase_la_OBJECTS): mptypes.h
124
125## Additional buffer I/O functions for mathematical objects.
126pkginclude_HEADERS += buf.h
127libcatacomb_la_SOURCES += buf.c
128
129## Infrastructure for fast exponentiation.
130pkginclude_HEADERS += exp.h
131libcatacomb_la_SOURCES += exp.c
132
133## Main user-visible multiprecision arithmetic.
134pkginclude_HEADERS += mp.h
135libmpbase_la_SOURCES += mp-arith.c
136TESTS += mp-arith.$t
137libmpbase_la_SOURCES += mp-const.c
138libcatacomb_la_SOURCES += mp-exp.c mp-exp.h
139libcatacomb_la_SOURCES += mp-gcd.c
140TESTS += mp-gcd.$t
141libmpbase_la_SOURCES += mp-io.c
142libcatacomb_la_SOURCES += mp-jacobi.c
143TESTS += mp-jacobi.$t
144libmpbase_la_SOURCES += mp-mem.c
145libmpbase_la_SOURCES += mp-misc.c
146libcatacomb_la_SOURCES += mp-modexp.c
147TESTS += mp-modexp.$t
148libcatacomb_la_SOURCES += mp-modsqrt.c
149TESTS += mp-modsqrt.$t
150libcatacomb_la_SOURCES += mp-sqrt.c
151TESTS += mp-sqrt.$t
152libcatacomb_la_SOURCES += mp-test.c
153EXTRA_DIST += tests/mp
154
155## Computing Fibonacci numbers.
156pkginclude_HEADERS += mp-fibonacci.h
157libcatacomb_la_SOURCES += mp-fibonacci.c
158TESTS += mp-fibonacci.$t
159
160## Special memory allocation for multiprecision integers.
161pkginclude_HEADERS += mparena.h
162libmpbase_la_SOURCES += mparena.c
163
164## Barrett reduction, an efficient method for modular reduction.
165pkginclude_HEADERS += mpbarrett.h
166libcatacomb_la_SOURCES += mpbarrett.c
167TESTS += mpbarrett.$t
168libcatacomb_la_SOURCES += mpbarrett-exp.c mpbarrett-mexp.c mpbarrett-exp.h
169TESTS += mpbarrett-exp.$t mpbarrett-mexp.$t
170EXTRA_DIST += tests/mpbarrett
171
172## Solving congruences using the Chinese Remainder Theorem.
173pkginclude_HEADERS += mpcrt.h
174libcatacomb_la_SOURCES += mpcrt.c
175TESTS += mpcrt.$t
176EXTRA_DIST += tests/mpcrt
177
178## Conversions between machine-native and multiprecision integers.
179pkginclude_HEADERS += mpint.h
180libcatacomb_la_SOURCES += mpint.c
181TESTS += mpint.$t
182EXTRA_DIST += tests/mpint
183
184## Table of upper and lower limits of various types of machine integers, as
185## multiprecision integers.
186nodist_archinclude_HEADERS += mplimits.h
187nodist_libcatacomb_la_SOURCES += mplimits.c
188CLEANFILES += mplimits.h mplimits.c
189noinst_PROGRAMS += genlimits
190genlimits_LDADD = libmpbase.la
191mplimits.c: genlimits$e
192 $(AM_V_GEN)./genlimits c >mplimits.c.new && \
193 mv mplimits.c.new mplimits.c
194mplimits.h: genlimits$e
195 $(AM_V_GEN)./genlimits h >mplimits.h.new && \
196 mv mplimits.h.new mplimits.h
197$(genlimits_OBJECTS): mptypes.h
198mplimits.lo: mplimits.h
199
200## Montgomery reduction, a clever method for modular arithmetic.
201pkginclude_HEADERS += mpmont.h
202libcatacomb_la_SOURCES += mpmont.c
203TESTS += mpmont.$t
204libcatacomb_la_SOURCES += mpmont-exp.c mpmont-mexp.c mpmont-exp.h
205TESTS += mpmont-exp.$t mpmont-mexp.$t
206EXTRA_DIST += tests/mpmont
207
208## Efficient multiplication of many small numbers.
209pkginclude_HEADERS += mpmul.h
210libcatacomb_la_SOURCES += mpmul.c
211TESTS += mpmul.$t
212
213## Generating random numbers.
214pkginclude_HEADERS += mprand.h
215libcatacomb_la_SOURCES += mprand.c
216
217## Efficient reduction modulo numbers with conveninent binary
218## representations.
219pkginclude_HEADERS += mpreduce.h
220libcatacomb_la_SOURCES += mpreduce.c mpreduce-exp.h
221TESTS += mpreduce.$t
222EXTRA_DIST += tests/mpreduce
223
224## Iteratiion over the bianry representation of multiprecision integers.
225pkginclude_HEADERS += mpscan.h
226libmpbase_la_SOURCES += mpscan.c
227
228## Conversion between multiprecision integers and their textual
229## representations.
230pkginclude_HEADERS += mptext.h
231libmpbase_la_SOURCES += mptext.c
232TESTS += mptext.$t
233libcatacomb_la_SOURCES += mptext-dstr.c
234libcatacomb_la_SOURCES += mptext-file.c
235libcatacomb_la_SOURCES += mptext-len.c
236libmpbase_la_SOURCES += mptext-string.c
237EXTRA_DIST += tests/mptext
238
239## Basic types used in the representation of multiprecision integers.
240nodist_archinclude_HEADERS += mptypes.h
241BUILT_SOURCES += mptypes.h
242CLEANFILES += mptypes.h
243noinst_PROGRAMS += mptypes
244mptypes.h: mptypes$e
245 $(AM_V_GEN)./mptypes >mptypes.h.new && mv mptypes.h.new mptypes.h
246
247## Low-level multiprecision arithmetic.
248pkginclude_HEADERS += mpx.h bitops.h mpw.h
249libmpbase_la_SOURCES += mpx.c
250TESTS += mpx.$t
251libmpbase_la_SOURCES += karatsuba.h mpx-kmul.c mpx-ksqr.c
252TESTS += mpx-kmul.$t mpx-ksqr.$t
253noinst_PROGRAMS += bittest
254TESTS += bittest
255EXTRA_DIST += tests/mpx
256
257## A quick-and-dirty parser, used for parsing descriptions of groups, fields,
258## etc.
259pkginclude_HEADERS += rho.h
260libcatacomb_la_SOURCES += rho.c
261TESTS += rho.$t
262
263## Pollard's `rho' algorithm for determining discrete logarithms.
264pkginclude_HEADERS += qdparse.h
265libcatacomb_la_SOURCES += qdparse.c
266
267###--------------------------------------------------------------------------
268### Prime number checking, searching, and related jobs.
269
270## Generating Lim--Lee groups, i.e., unit groups of finite fields without
271## small subgroups (except for the obvious ones).
272pkginclude_HEADERS += limlee.h
273libcatacomb_la_SOURCES += limlee.c
274
275## A table of small prime numbers.
276nodist_pkginclude_HEADERS += primetab.h
277nodist_libcatacomb_la_SOURCES += primetab.c
278CLEANFILES += primetab.h primetab.c
279BUILT_SOURCES += primetab.h primetab.c
280noinst_PROGRAMS += genprimes
ba6e6b64 281genprimes_LDADD = $(mLib_LIBS)
7db733d4
MW
282primetab.h: primetab.c
283primetab.c: genprimes$e
284 $(AM_V_GEN)./genprimes -hprimetab.h -cprimetab.c \
285 -sCATACOMB_PRIMETAB_H \
286 -n256 -t"unsigned short" -iprimetab
287
288## Filtering candidate prime numbers by checking for small factors
289## efficiently.
290pkginclude_HEADERS += pfilt.h
291libcatacomb_la_SOURCES += pfilt.c
292
293## Generating prime numbers (and other kinds of numbers which need searching
294## for).
295pkginclude_HEADERS += pgen.h
296libcatacomb_la_SOURCES += pgen.c
297libcatacomb_la_SOURCES += pgen-gcd.c
298libcatacomb_la_SOURCES += pgen-simul.c
299libcatacomb_la_SOURCES += pgen-stdev.c
300TESTS += pgen.$t
301EXTRA_DIST += tests/pgen
302
303## Finding primitive elements in finite fields.
304pkginclude_HEADERS += prim.h
305libcatacomb_la_SOURCES += prim.c
306
307## Iterating over all prime numbers from a given starting point.
308pkginclude_HEADERS += primeiter.h
309libcatacomb_la_SOURCES += primeiter.c
310TESTS += primeiter.$t
311primeiter.lo: wheel.h
312
313## The Miller--Rabin primality test.
314pkginclude_HEADERS += rabin.h
315libcatacomb_la_SOURCES += rabin.c
316
317## Finding `strong' primes, using Gordon's algorithm. Once upon a time,
318## products of these kinds of numbers were harder to factor.
319pkginclude_HEADERS += strongprime.h
320libcatacomb_la_SOURCES += strongprime.c
321
322## A `wheel', used by the prime iteration machinery.
323nodist_pkginclude_HEADERS += wheel.h
324nodist_libcatacomb_la_SOURCES += wheel.c
325CLEANFILES += wheel.h wheel.c
326noinst_PROGRAMS += genwheel
ba6e6b64 327genwheel_LDADD = $(mLib_LIBS)
7db733d4
MW
328wheel.h: wheel.c
329wheel.c: genwheel$e
330 $(AM_V_GEN)./genwheel -hwheel.h -cwheel.c \
331 -sCATACOMB_WHEEL_H \
332 -n5 -t"unsigned char" -iwheel
333
334###--------------------------------------------------------------------------
335### Binary polynomial arithmetic.
336
337## User-visible binary polynomial arithmetic.
338pkginclude_HEADERS += gf.h
339libcatacomb_la_SOURCES += gf-arith.c
340TESTS += gf-arith.$t
341libcatacomb_la_SOURCES += gf-exp.c gf-exp.h
342libcatacomb_la_SOURCES += gf-gcd.c
343TESTS += gf-gcd.$t
344EXTRA_DIST += tests/gf
345
346## Low-level binary polynomial arithmetic.
347pkginclude_HEADERS += gfx.h
348libcatacomb_la_SOURCES += gfx.c
349TESTS += gfx.$t
350libcatacomb_la_SOURCES += gfx-kmul.c
351TESTS += gfx-kmul.$t
352libcatacomb_la_SOURCES += gfx-sqr.c
353gfx-sqr.lo: gfx-sqr-tab.h
354TESTS += gfx-sqr.$t
355CLEANFILES += gfx-sqr-tab.h
356noinst_PROGRAMS += gfx-sqr-mktab
357gfx-sqr-tab.h: gfx-sqr-mktab$e
358 $(AM_V_GEN)./gfx-sqr-mktab >gfx-sqr-tab.h.in && \
359 mv gfx-sqr-tab.h.in gfx-sqr-tab.h
360EXTRA_DIST += tests/gfx
361
362## Conversions between normal and polynomial basis representations for binary
363## fields.
364pkginclude_HEADERS += gfn.h
365libcatacomb_la_SOURCES += gfn.c
366TESTS += gfn.$t
367EXTRA_DIST += tests/gfn
368
369## Efficient reduction modulo sparse polynomials.
370pkginclude_HEADERS += gfreduce.h
371libcatacomb_la_SOURCES += gfreduce.c gfreduce-exp.h
372TESTS += gfreduce.$t
373EXTRA_DIST += tests/gfreduce
374
375###--------------------------------------------------------------------------
376### Abstractions for various kinds of algebraic objects.
377
378## Abstract cyclic groups.
379pkginclude_HEADERS += group.h group-guts.h
380libcatacomb_la_SOURCES += group-dstr.c
381libcatacomb_la_SOURCES += group-exp.c group-exp.h
382libcatacomb_la_SOURCES += group-file.c
383libcatacomb_la_SOURCES += group-parse.c
384libcatacomb_la_SOURCES += group-stdops.c
385libcatacomb_la_SOURCES += group-string.c
386libcatacomb_la_SOURCES += g-bin.c
387libcatacomb_la_SOURCES += g-prime.c
388libcatacomb_la_SOURCES += g-ec.c
389EXTRA_DIST += group-test.c
390TESTS += group-test.$t
391EXTRA_DIST += tests/group
392
393## Abstract finite fields.
394pkginclude_HEADERS += field.h field-guts.h
395libcatacomb_la_SOURCES += field.c
396libcatacomb_la_SOURCES += field-exp.c field-exp.h
397libcatacomb_la_SOURCES += field-parse.c
398libcatacomb_la_SOURCES += f-binpoly.c
399libcatacomb_la_SOURCES += f-niceprime.c
400libcatacomb_la_SOURCES += f-prime.c
401
402## Table of built-in binary fields.
403pkginclude_HEADERS += bintab.h
404libcatacomb_la_SOURCES += bintab.c
405CLEANFILES += bintab.c
406EXTRA_DIST += bintab.in bin-gentab.awk
407bintab.c: bintab.in bin-gentab.awk mpdump$e
408 $(AM_V_GEN)awk -f $(srcdir)/bin-gentab.awk \
409 <$(srcdir)/bintab.in >bintab.c.new && \
410 mv bintab.c.new bintab.c
411
412## Table of built-in prime fields.
413pkginclude_HEADERS += ptab.h
414libcatacomb_la_SOURCES += ptab.c
415CLEANFILES += ptab.c
416EXTRA_DIST += ptab.in p-gentab.awk
417ptab.c: ptab.in p-gentab.awk mpdump$e
418 $(AM_V_GEN)awk -f $(srcdir)/p-gentab.awk \
419 <$(srcdir)/ptab.in >ptab.c.new && \
420 mv ptab.c.new ptab.c
421
422## A utility for building multiprecision integer constants.
423noinst_PROGRAMS += mpdump
424mpdump_LDADD = libmpbase.la
425$(mpdump_OBJECTS): mptypes.h
426
427###--------------------------------------------------------------------------
428### Elliptic curve arithmetic.
429
430## Basic elliptic curve arithmetic.
431pkginclude_HEADERS += ec.h ec-guts.h
432libcatacomb_la_SOURCES += ec.c
433libcatacomb_la_SOURCES += ec-exp.c ec-exp.h
434libcatacomb_la_SOURCES += ec-info.c
435TESTS += ec-info.$t
436libcatacomb_la_SOURCES += ec-bin.c
437TESTS += ec-bin.$t
438libcatacomb_la_SOURCES += ec-prime.c
439TESTS += ec-prime.$t
440EXTRA_DIST += tests/ec
441
442## The standard `raw' encoding (`EC2OSP') of elliptic curve points.
443pkginclude_HEADERS += ec-raw.h
444libcatacomb_la_SOURCES += ec-raw.c
445
446## Test infrastructure for elliptic curves.
447pkginclude_HEADERS += ec-test.h
448libcatacomb_la_SOURCES += ec-test.c
449TESTS += ec-test.$t
450
451## A table of built-in elliptic curves.
452pkginclude_HEADERS += ectab.h
453libcatacomb_la_SOURCES += ectab.c
454CLEANFILES += ectab.c
455EXTRA_DIST += ectab.in ec-gentab.awk
456ectab.c: ectab.in ec-gentab.awk mpdump$e
457 $(AM_V_GEN)awk -f $(srcdir)/ec-gentab.awk \
458 <$(srcdir)/ectab.in >ectab.c.new && \
459 mv ectab.c.new ectab.c
460
461###--------------------------------------------------------------------------
462### Autogenerated lists.
463
464## Fancy template substitutions.
465multigen = python $(srcdir)/multigen
466EXTRA_DIST += multigen
467
468## The heart of this is an enormous cross-product of crypto primitives and
469## the corresponding modes of operation. Rather than write it out longhand,
470## we generate it using `multigen'. Unfortunately, this needs to be done
471## at the Automake level, which causes some interesting bootstrapping
472## problems.
473include modes.am
474
475EXTRA_DIST += modes.am.in modes.am
476MAINTAINERCLEANFILES += $(srcdir)/modes.am
477
478## Generate the lists.
479$(srcdir)/modes.am: modes.am.in
480 $(AM_V_GEN)$(multigen) -g $(srcdir)/modes.am.in $(srcdir)/modes.am \
481 blkc="$(BLKCS)" \
482 blkcmode="$(BLKCMODES)" \
483 blkcciphermode="$(BLKCCIPHERMODES)" \
484 hash="$(HASHES)" \
485 hashmode="$(HASHMODES)" \
486 hashciphermode="$(HASHCIPHERMODES)" \
487 hashmacmode="$(HASHMACMODES)"
488
489## Initialize lists of known classes.
490ALL_CIPHERS = $(CIPHER_MODES)
491ALL_HASHES = $(HASHES)
492ALL_MACS = $(MAC_MODES)
493
494###--------------------------------------------------------------------------
495### Block ciphers.
496
497BLKCS =
498BLKCMODES =
499
500BLKCCIPHERMODES =
501BLKCMODES += $(BLKCCIPHERMODES)
502
503## A tool for translating the AES-contest test vectors into a form our test
504## rigs understand.
505EXTRA_DIST += tests/aes-trans
506
507## Block cipher utility macros, mainly used in mode implementations.
508pkginclude_HEADERS += blkc.h
509
510## Source code and headers for the block ciphers.
511libcatacomb_la_SOURCES += $(BLKC_C)
512pkginclude_HEADERS += $(BLKC_H)
513
514## Schneier's `Blowfish' block cipher.
515BLKCS += blowfish
516blowfish.lo: blowfish-tab.h
517CLEANFILES += blowfish-tab.h
518noinst_PROGRAMS += blowfish-mktab
cc3ca08f 519blowfish_mktab_CPPFLAGS = $(AM_CPPFLAGS) -DQUIET
7db733d4
MW
520blowfish-tab.h: blowfish-mktab$e
521 $(AM_V_GEN)./blowfish-mktab >blowfish-tab.h.new && \
522 mv blowfish-tab.h.new blowfish-tab.h
523
524## Adams and Tavares' `CAST' block ciphers.
525BLKCS += cast128 cast256
526libcatacomb_la_SOURCES += cast-s.c cast-sk.c cast-base.h cast-tab.h
527cast256.$t: tests/cast256
528EXTRA_DIST += tests/cast256.aes
529MAINTAINERCLEANFILES += $(srcdir)/tests/cast256
530tests/cast256: tests/cast256.aes
531 $(AM_V_GEN)$(srcdir)/tests/aes-trans CAST256 \
532 <$(srcdir)/tests/cast256.aes \
533 >$(srcdir)/tests/cast256.new && \
534 mv $(srcdir)/tests/cast256.new $(srcdir)/tests/cast256
535
536## IBM's `DES' block cipher, by Feistel, Coppersmith, and others.
537BLKCS += des des3
538libcatacomb_la_SOURCES += des-base.h des-base.c desx-tab.h
539des-base.lo: des-tab.h
540CLEANFILES += des-tab.h
541noinst_PROGRAMS += des-mktab
542des-tab.h: des-mktab$e
543 $(AM_V_GEN)./des-mktab >des-tab.h.new && \
544 mv des-tab.h.new des-tab.h
545
546## Rivest's `DESX' variant, with pre- and post-whitening.
547BLKCS += desx
548libcatacomb_la_SOURCES += desx-tab.h
549
550## Lai and Massey's IDEA.
551BLKCS += idea
552
553## IBM's `MARS' block cipher.
554BLKCS += mars
555mars.lo: mars-tab.h
556CLEANFILES += mars-tab.h
557noinst_PROGRAMS += mars-mktab
558mars-tab.h: mars-mktab$e
559 $(AM_V_GEN)./mars-mktab >mars-tab.h.new && \
560 mv mars-tab.h.new mars-tab.h
561mars.$t: tests/mars
562EXTRA_DIST += tests/mars.aes
563MAINTAINERCLEANFILES += $(srcdir)/tests/mars
564tests/mars: tests/mars.aes
565 $(AM_V_GEN)$(srcdir)/tests/aes-trans Mars \
566 <$(srcdir)/tests/mars.aes \
567 >$(srcdir)/tests/mars.new && \
568 mv $(srcdir)/tests/mars.new $(srcdir)/tests/mars
569
570## Daemen, Peeters, Van Assche and Rijmen's `Noekeon'.
571BLKCS += noekeon
572
573## Rivest's `RC2' block cipher.
574BLKCS += rc2
575libcatacomb_la_SOURCES += rc2-tab.h
576
577## Rivest's `RC5'.
578BLKCS += rc5
579
580## Daemen and Rijmen's `Rijndael' block cipher, selected as AES.
581BLKCS += rijndael rijndael192 rijndael256
582libcatacomb_la_SOURCES += rijndael-base.h rijndael-base.c
583rijndael-base.lo: rijndael-tab.h
584CLEANFILES += rijndael-tab.h
585noinst_PROGRAMS += rijndael-mktab
586rijndael-tab.h: rijndael-mktab$e
587 $(AM_V_GEN)./rijndael-mktab >rijndael-tab.h.new && \
588 mv rijndael-tab.h.new rijndael-tab.h
589rijndael.$t: tests/rijndael
590EXTRA_DIST += tests/rijndael.aes
591MAINTAINERCLEANFILES += $(srcdir)/tests/rijndael
592tests/rijndael: tests/rijndael.aes
593 $(AM_V_GEN)$(srcdir)/tests/aes-trans Rijndael \
594 <$(srcdir)/tests/rijndael.aes \
595 >$(srcdir)/tests/rijndael.new && \
596 mv $(srcdir)/tests/rijndael.new $(srcdir)/tests/rijndael
597
598## Massey's `SAFER' block ciphers.
599BLKCS += safer safersk
600safer.lo: safer-tab.h
601CLEANFILES += safer-tab.h
602noinst_PROGRAMS += safer-mktab
603safer-tab.h: safer-mktab$e
604 $(AM_V_GEN)./safer-mktab >safer-tab.h.new && \
605 mv safer-tab.h.new safer-tab.h
606
607## Anderson, Biham and Knudsen's `Serpent' block cipher.
608BLKCS += serpent
609libcatacomb_la_SOURCES += serpent-sbox.h
610noinst_PROGRAMS += serpent-check
611TESTS += serpent-check
612serpent.$t: tests/serpent
613EXTRA_DIST += tests/serpent.aes
614MAINTAINERCLEANFILES += $(srcdir)/tests/serpent
615tests/serpent: tests/serpent.aes
616 $(AM_V_GEN)$(srcdir)/tests/aes-trans Serpent -v rev=1 \
617 <$(srcdir)/tests/serpent.aes \
618 >$(srcdir)/tests/serpent.new && \
619 mv $(srcdir)/tests/serpent.new $(srcdir)/tests/serpent
620
621## The National Security Agency's `Skipjack' block cipher. You don't want to
622## use this.
623BLKCS += skipjack
624libcatacomb_la_SOURCES += skipjack-tab.h
625
626## Daemen and Rijmen's `Square' block cipher.
627BLKCS += square
628square.lo: square-tab.h
629CLEANFILES += square-tab.h
630noinst_PROGRAMS += square-mktab
631square-tab.h: square-mktab$e
632 $(AM_V_GEN)./square-mktab >square-tab.h.new && \
633 mv square-tab.h.new square-tab.h
634
635## Wheeler and Needham's `TEA' and `XTEA' block ciphers.
636BLKCS += tea xtea
637
638## Schneier, Kelsey, Whiting, Wagner, Hall and Ferguson's `Twofish' block
639## cipher.
640BLKCS += twofish
641twofish.lo: twofish-tab.h
642CLEANFILES += twofish-tab.h
643noinst_PROGRAMS += twofish-mktab
644twofish-tab.h: twofish-mktab$e
645 $(AM_V_GEN)./twofish-mktab >twofish-tab.h.new && \
646 mv twofish-tab.h.new twofish-tab.h
647twofish.$t: tests/twofish
648EXTRA_DIST += tests/twofish.aes
649MAINTAINERCLEANFILES += $(srcdir)/tests/twofish
650tests/twofish: tests/twofish.aes
651 $(AM_V_GEN)$(srcdir)/tests/aes-trans Twofish \
652 <$(srcdir)/tests/twofish.aes \
653 >$(srcdir)/tests/twofish.new && \
654 mv $(srcdir)/tests/twofish.new $(srcdir)/tests/twofish
655
656## The old NIST modes for DES.
657BLKCCIPHERMODES += cbc cfb ecb ofb
658
659## Counter mode.
660BLKCCIPHERMODES += counter
661
662###--------------------------------------------------------------------------
663### Hash functions.
664
665HASHES =
666HASHMODES =
667
668HASHCIPHERMODES =
669HASHMODES += $(HASHCIPHERMODES)
670
671HASHMACMODES =
672HASHMODES += $(HASHMACMODES)
673
674## Common definitions for hash functions.
675pkginclude_HEADERS += hash.h
676
677## Source code and headers for the hash functions.
678libcatacomb_la_SOURCES += $(HASH_C)
679pkginclude_HEADERS += $(HASH_H)
680
681## Lim and KISA's `HAS-160', recommended for use with KCDSA.
682HASHES += has160
683
684## Rivest's `MD' series of hash functions
685HASHES += md2 md4 md5
686libcatacomb_la_SOURCES += md2-tab.h
687
688## Dobbertin, Bosselaers and Preneel's `RIPEMD' suite.
689HASHES += rmd128 rmd160 rmd256 rmd320
690
691## The National Security Agency's `SHA-1' hash function.
692HASHES += sha
693
694## The National Security Agency's `SHA-2' suite.
695HASHES += sha224 sha256
696HASHES += sha384 sha512
697
698## Anderson and Biham's `Tiger' hash function.
699HASHES += tiger
700libcatacomb_la_SOURCES += tiger-base.h
701tiger.lo: tiger-tab.h
702CLEANFILES += tiger-tab.h
703noinst_PROGRAMS += tiger-mktab
704tiger-tab.h: tiger-mktab$e
705 $(AM_V_GEN)./tiger-mktab >tiger-tab.h.new && \
706 mv tiger-tab.h.new tiger-tab.h
707
708## Barreto and Rijmen's `Whirlpool' hash function.
709HASHES += whirlpool whirlpool256
710whirlpool.lo: whirlpool-tab.h
711CLEANFILES += whirlpool-tab.h
712noinst_PROGRAMS += whirlpool-mktab
713whirlpool-tab.h: whirlpool-mktab$e
714 $(AM_V_GEN)./whirlpool-mktab >whirlpool-tab.h.new && \
715 mv whirlpool-tab.h.new whirlpool-tab.h
716
717## Bellare, Canetti and Krawczyk's `HMAC' mode for message authentication.
718HASHMACMODES += hmac
719
720## MGF1, used in OAEP and PSS.
721HASHCIPHERMODES += mgf
722
723###--------------------------------------------------------------------------
724### Other symmetric primitives.
725
726## The CRC32 algorithm, which is useful, but has no worthwhile security.
727pkginclude_HEADERS += crc32.h
728libcatacomb_la_SOURCES += crc32.c
729ALL_HASHES += crc32=gcrc32
730
731## Rivest's `RC4' stream cipher.
732pkginclude_HEADERS += rc4.h
733libcatacomb_la_SOURCES += rc4.c
734TESTS += rc4.$t
735EXTRA_DIST += tests/rc4
736ALL_CIPHERS += rc4
737
738## Coppersmith and Rogaway's `SEAL' pseudorandom function.
739pkginclude_HEADERS += seal.h
740libcatacomb_la_SOURCES += seal.c
741TESTS += seal.$t
742EXTRA_DIST += tests/seal
743ALL_CIPHERS += seal
744###--------------------------------------------------------------------------
745### Autogenerated mode implementations.
746
747## The master stamp file, indicating that we generated all of the sources.
748CLEANFILES += modes-gen-stamp
749EXTRA_DIST += mode.h.in mode.c.in
750modes-gen-stamp:
751 $(AM_V_at)touch modes-gen-stamp
752 $(AM_V_GEN)$(multigen) -g $(srcdir)/mode.c.in \
753 @base-@mode.c \
754 base="$(BLKCS)" mode="$(BLKCMODES)"
755 $(AM_V_at)$(multigen) -g $(srcdir)/mode.c.in \
756 @base-@mode.c \
757 base="$(HASHES)" mode="$(HASHMODES)"
758 $(AM_V_at)$(multigen) -g $(srcdir)/mode.h.in \
759 @base-@mode.h \
760 base="$(BLKCS)" mode="$(BLKCMODES)"
761 $(AM_V_at)$(multigen) -g $(srcdir)/mode.h.in \
762 @base-@mode.h \
763 base="$(HASHES)" mode="$(HASHMODES)"
764 $(AM_V_at)touch modes-gen-stamp
765
766## The individual mode interfaces and implementations.
767pkginclude_HEADERS += $(MODE_H)
768
769## Generated implementations.
770BUILT_SOURCES += $(GENMODES_C)
771CLEANFILES += $(GENMODES_C)
772nodist_libcatacomb_la_SOURCES += $(GENMODES_C)
773$(GENMODES_C): modes-gen-stamp
774
775## Generated interfaces.
776BUILT_SOURCES += $(GENMODES_H)
777CLEANFILES += $(GENMODES_H)
778nodist_pkginclude_HEADERS += $(GENMODES_H)
779$(GENMODES_H): modes-gen-stamp
780
781###--------------------------------------------------------------------------
782### Tables of classes for encryption, hashing, and message authentication.
783
784## The skeleton for the class tables.
785EXTRA_DIST += gthingtab.c.in
786
787## Table of cipher classes.
788pkginclude_HEADERS += gcipher.h
789CLEANFILES += gciphertab.c
790nodist_libcatacomb_la_SOURCES += gciphertab.c
791gciphertab.c: gthingtab.c.in
792 $(AM_V_GEN)$(multigen) -g $(srcdir)/gthingtab.c.in gciphertab.c \
793 what=gcipher cls=gccipher thing="$(ALL_CIPHERS)"
794
795## Table of hash classes.
796pkginclude_HEADERS += ghash.h ghash-def.h
797CLEANFILES += ghashtab.c
798nodist_libcatacomb_la_SOURCES += ghashtab.c
799ghashtab.c: gthingtab.c.in
800 $(AM_V_GEN)$(multigen) -g $(srcdir)/gthingtab.c.in ghashtab.c \
801 what=ghash cls=gchash thing="$(ALL_HASHES)"
802
803## Table of MAC classes.
804pkginclude_HEADERS += gmac.h
805CLEANFILES += gmactab.c
806nodist_libcatacomb_la_SOURCES += gmactab.c
807gmactab.c: gthingtab.c.in
808 $(AM_V_GEN)$(multigen) -g $(srcdir)/gthingtab.c.in gmactab.c \
809 what=gmac cls=gcmac thing="$(ALL_MACS)"
810
811###--------------------------------------------------------------------------
812### Testing for symmetric crypto things.
813
814## Run the test programs.
815TESTS += $(SYMM_TESTS)
816EXTRA_DIST += $(SYMM_TEST_FILES)
817
818## A piece of sample text for round-trip testing encryption modes.
819EXTRA_DIST += daftstory.h
820
821###--------------------------------------------------------------------------
822### Key management.
823
824## Assistance for elliptic-curve keys.
825pkginclude_HEADERS += ec-keys.h
826libcatacomb_la_SOURCES += ec-fetch.c
827
828## Managing keys and keyring files.
829pkginclude_HEADERS += key.h
830libcatacomb_la_SOURCES += key-attr.c
831libcatacomb_la_SOURCES += key-fetch.c
832libcatacomb_la_SOURCES += key-file.c
833libcatacomb_la_SOURCES += key-io.c
834libcatacomb_la_SOURCES += key-misc.c
835libcatacomb_la_SOURCES += key-moan.c
836
837## Managing key data.
838pkginclude_HEADERS += key-data.h
839libcatacomb_la_SOURCES += key-binary.c
840libcatacomb_la_SOURCES += key-data.c
841libcatacomb_la_SOURCES += key-flags.c
842libcatacomb_la_SOURCES += key-pack.c
843libcatacomb_la_SOURCES += key-pass.c
844libcatacomb_la_SOURCES += key-text.c
845
846## Error reporting.
847pkginclude_HEADERS += key-error.h
848libcatacomb_la_SOURCES += key-error.c
849
850## Reading passphrases.
851pkginclude_HEADERS += passphrase.h
852libcatacomb_la_SOURCES += passphrase.c
853
854## Interfacing with the passphrase pixie.
855pkginclude_HEADERS += pixie.h
856libcatacomb_la_SOURCES += pixie-common.c
857
858###--------------------------------------------------------------------------
859### Secret sharing.
860
861## Efficient sharing over GF(2^8).
862pkginclude_HEADERS += gfshare.h
863libcatacomb_la_SOURCES += gfshare.c
864gfshare.lo: gfshare-tab.h
865CLEANFILES += gfshare-tab.h
866noinst_PROGRAMS += gfshare-mktab
867gfshare-tab.h: gfshare-mktab$e
868 $(AM_V_GEN)./gfshare-mktab >gfshare-tab.h.new && \
869 mv gfshare-tab.h.new gfshare-tab.h
870TESTS += gfshare.$t
871
872## Number-theoretic sharing over GF(p).
873pkginclude_HEADERS += share.h
874libcatacomb_la_SOURCES += share.c
875TESTS += share.$t
876
877###--------------------------------------------------------------------------
878### Public-key cryptography.
879
880## The Blum--Blum--Shub random-bit generator.
881pkginclude_HEADERS += bbs.h
882libcatacomb_la_SOURCES += bbs-fetch.c
883libcatacomb_la_SOURCES += bbs-gen.c
884libcatacomb_la_SOURCES += bbs-jump.c
885TESTS += bbs-jump.$t
886libcatacomb_la_SOURCES += bbs-rand.c
887TESTS += bbs-rand.$t
888EXTRA_DIST += tests/bbs
889
890## Plain Diffie--Hellman, in Schorr groups.
891pkginclude_HEADERS += dh.h
892libcatacomb_la_SOURCES += dh-check.c
893libcatacomb_la_SOURCES += dh-fetch.c
894libcatacomb_la_SOURCES += dh-gen.c
895libcatacomb_la_SOURCES += dh-kcdsa.c
896libcatacomb_la_SOURCES += dh-limlee.c
897libcatacomb_la_SOURCES += dh-param.c
898TESTS += dh-param.$t
899
900## The National Security Agency's Digital Signature Algorithm.
901pkginclude_HEADERS += dsa.h
902libcatacomb_la_SOURCES += dsa-gen.c
903TESTS += dsa-gen.$t
904libcatacomb_la_SOURCES += dsa-misc.c
905libcatacomb_la_SOURCES += dsa-sign.c
906TESTS += dsa-sign.$t
907libcatacomb_la_SOURCES += dsa-verify.c
908TESTS += dsa-verify.$t
909libcatacomb_la_SOURCES += dsa-check.c
910EXTRA_DIST += tests/dsa
911
912## Generalization of DSA to arbitrary cyclic groups.
913pkginclude_HEADERS += gdsa.h
914libcatacomb_la_SOURCES += gdsa.c
915TESTS += gdsa.$t
916EXTRA_DIST += tests/gdsa
917
918## KISA `KCDSA', generalized to arbitrary cyclic groups.
919pkginclude_HEADERS += gkcdsa.h
920libcatacomb_la_SOURCES += gkcdsa.c
921TESTS += gkcdsa.$t
922EXTRA_DIST += tests/gkcdsa
923
924## General key validity checking machinery.
925pkginclude_HEADERS += keycheck.h
926libcatacomb_la_SOURCES += keycheck.c
927libcatacomb_la_SOURCES += keycheck-mp.c
928libcatacomb_la_SOURCES += keycheck-report.c
929
930## The Rivest--Shamir--Adleman trapdoor one-way function.
931pkginclude_HEADERS += rsa.h
932libcatacomb_la_SOURCES += rsa-fetch.c
933libcatacomb_la_SOURCES += rsa-gen.c
934libcatacomb_la_SOURCES += rsa-priv.c
935libcatacomb_la_SOURCES += rsa-pub.c
936libcatacomb_la_SOURCES += rsa-recover.c
937libcatacomb_la_SOURCES += oaep.c
938libcatacomb_la_SOURCES += pkcs1.c
939libcatacomb_la_SOURCES += pss.c
940EXTRA_DIST += rsa-test.c
941TESTS += rsa-test.$t
942EXTRA_DIST += tests/rsa
943
944###--------------------------------------------------------------------------
945### Random number generators.
946
947## The FIPS186 generator used to generate DSA domain parameters.
948pkginclude_HEADERS += dsarand.h
949libcatacomb_la_SOURCES += dsarand.c
950
951## Knuth's lagged-Fibonacci generator.
952pkginclude_HEADERS += fibrand.h
953libcatacomb_la_SOURCES += fibrand.c
954
955## The FIPS 140--2 random number generator tests.
956pkginclude_HEADERS += fipstest.h
957libcatacomb_la_SOURCES += fipstest.c
958
959## Interface for generic random number sources.
960pkginclude_HEADERS += grand.h
961libcatacomb_la_SOURCES += grand.c
962
963## A simple linear-congruential generator.
964pkginclude_HEADERS += lcrand.h
965libcatacomb_la_SOURCES += lcrand.c
966TESTS += lcrand.$t
967EXTRA_DIST += tests/lcrand
968
969## Maurer's universal statistical test.
970pkginclude_HEADERS += maurer.h
971libcatacomb_la_SOURCES += maurer.c
972
973## System-specific noise acquisition.
974pkginclude_HEADERS += noise.h
975libcatacomb_la_SOURCES += noise.c
976
977## Cryptographic laundering for true random data generation.
978pkginclude_HEADERS += rand.h
979libcatacomb_la_SOURCES += rand.c
980
981## The SSL v3 pseudorandom function.
982pkginclude_HEADERS += sslprf.h
983libcatacomb_la_SOURCES += sslprf.c
984TESTS += sslprf.$t
985EXTRA_DIST += tests/sslprf
986
987## The TLS v1 pseudorandom function.
988pkginclude_HEADERS += tlsprf.h
989libcatacomb_la_SOURCES += tlsprf.c
990TESTS += tlsprf.$t
991EXTRA_DIST += tests/tlsprf
992
993###--------------------------------------------------------------------------
994### The `catcrypt' library.
995
996noinst_LTLIBRARIES += libcatcrypt.la
997libcatcrypt_la_SOURCES =
998
999## The main library.
1000libcatcrypt_la_SOURCES += cc.h
1001libcatcrypt_la_SOURCES += cc-enc.c
1002libcatcrypt_la_SOURCES += cc-hash.c
1003libcatcrypt_la_SOURCES += cc-kem.c
1004libcatcrypt_la_SOURCES += cc-list.c
1005libcatcrypt_la_SOURCES += cc-progress.c
1006libcatcrypt_la_SOURCES += cc-sig.c
1007libcatcrypt_la_SOURCES += cc-subcmd.c
1008
1009## Date parsing.
1010libcatcrypt_la_SOURCES += getdate.h
1011libcatcrypt_la_SOURCES += getdate.y
1012
1013###--------------------------------------------------------------------------
1014### Utility programs.
1015
ba6e6b64 1016UTILS_LIBS = libcatcrypt.la libcatacomb.la $(mLib_LIBS) $(LIBS)
7db733d4
MW
1017
1018## Generate and verify datestamped cookies.
1019bin_PROGRAMS += cookie
1020cookie_LDADD = $(UTILS_LIBS)
1021dist_man_MANS += cookie.1
1022
1023## Asymmetric message encryption and decryption with deniable authentication.
1024bin_PROGRAMS += catcrypt
1025catcrypt_LDADD = $(UTILS_LIBS)
1026dist_man_MANS += catcrypt.1
1027
1028## Signing and verifying files.
1029bin_PROGRAMS += catsign
1030catsign_LDADD = $(UTILS_LIBS)
1031dist_man_MANS += catsign.1
1032
1033## Issue and verify signatures on directory trees.
1034bin_PROGRAMS += dsig
1035dsig_LDADD = $(UTILS_LIBS)
1036dist_man_MANS += dsig.1
1037
1038## Compute factorials to arbitrary precision.
1039bin_PROGRAMS += factorial
1040factorial_LDADD = $(UTILS_LIBS)
1041
1042## Compute Fibonacci numbers to arbitrary precision.
1043bin_PROGRAMS += fibonacci
1044fibonacci_LDADD = $(UTILS_LIBS)
1045
1046## Compute hashes of files.
1047bin_PROGRAMS += hashsum
1048hashsum_LDADD = $(UTILS_LIBS)
1049dist_man_MANS += hashsum.1
1050
1051## Key management utility.
1052bin_PROGRAMS += key
1053key_SOURCES = keyutil.c
1054key_LDADD = $(UTILS_LIBS)
1055dist_man_MANS += key.1 keyring.5
1056
1057## Generate passphrases with given entropy using wordlists and Markov models.
1058bin_PROGRAMS += mkphrase
1059mkphrase_LDADD = $(UTILS_LIBS)
1060dist_man_MANS += mkphrase.1
1061
1062## Performance testing.
1063bin_PROGRAMS += perftest
1064perftest_LDADD = $(UTILS_LIBS)
1065
1066## Remember passphrases for limited periods of time.
1067bin_PROGRAMS += pixie
1068pixie_SOURCES = pixie.c
ba6e6b64 1069pixie_LDADD = libcatacomb.la $(mLib_LIBS) $(PIXIE_LIBS)
7db733d4
MW
1070dist_man_MANS += pixie.1
1071EXTRA_DIST += xpixie
1072
1073## Generate random data.
1074bin_PROGRAMS += rspit
1075rspit_LDADD = $(UTILS_LIBS)
1076
1077###--------------------------------------------------------------------------
1078### Testing.
1079
1080SUFFIXES += .c .$t .to
1081.c.to:
1082 $(AM_V_CC)$(COMPILE) -c -DTEST_RIG -DSRCDIR=\"$(srcdir)\" $< -o $@
1083.to.$t: libcatacomb.la
ba6e6b64 1084 $(AM_V_CCLD)$(LINK) $< libcatacomb.la $(mLib_LIBS) $(LIBS)
7db733d4
MW
1085.PRECIOUS: %.to
1086CLEANFILES += *.to *.$t
1087
1088###--------------------------------------------------------------------------
1089### The pkg-config file.
1090
1091pkgconfigdir = $(libdir)/pkgconfig
1092pkgconfig_DATA = catacomb.pc
1093EXTRA_DIST += catacomb.pc.in
1094CLEANFILES += catacomb.pc
1095
1096catacomb.pc: catacomb.pc.in Makefile
1097 $(SUBST) $(srcdir)/catacomb.pc.in >$@.new $(SUBSTITUTIONS) && \
1098 mv $@.new $@
1099
1100###--------------------------------------------------------------------------
1101### Release tweaking.
1102
1103## Release number.
1104dist-hook::
1105 echo $(VERSION) >$(distdir)/RELEASE
1106
1107## Additional build tools.
ba6e6b64 1108EXTRA_DIST += config/auto-version
7db733d4
MW
1109
1110###--------------------------------------------------------------------------
1111### Debian.
1112
1113## General stuff.
1114EXTRA_DIST += debian/rules
1115EXTRA_DIST += debian/control
1116EXTRA_DIST += debian/changelog
1117EXTRA_DIST += debian/copyright
1118
1119## catacomb-bin
1120EXTRA_DIST += debian/catacomb-bin.prerm
1121EXTRA_DIST += debian/catacomb-bin.postinst
1122EXTRA_DIST += debian/catacomb-bin.config
1123EXTRA_DIST += debian/catacomb-bin.templates
1124
1125###----- That's all, folks --------------------------------------------------