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