## -*-m4-*- ## ## $Id$ ## ## Makefile for Catacomb ## ## (c) 1999 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. AUTOMAKE_OPTIONS = foreign SUBDIRS = tests archincludedir = $(libdir)/catacomb/include ## --- List handling macros --- ## ## List handling is nice, usually. Unfortunately, I based this design on ## TeX list macros rather than anything sensible... define(`_', `define(`_item', $1)define(`_item_2', $2)emit`'') define(`adorn', `pushdef(`emit', `$1`'_item`'$3')$2`'popdef(`emit')') define(`join', `pushdef(`emit', `adorn(``_(''_item`$2', `$3', ``)'')`'')$1`'popdef(`emit')') define(`addsuffix', `adorn(`', `$1', `$2')') define(`lit', `adorn(`', `$1', `')') define(`nl', ` ') define(`allwithsuffix', `addsuffix(`$1', `$3') addsuffix(`$2', `$3') dnl addsuffix(join(`$1', `-', `$2'), `$3')') ## --- Autogenerated source files --- define(`ciphers', `dnl _(des) _(desx) _(des3) _(mars) dnl _(idea) _(safer) _(safersk) dnl _(blowfish) _(twofish) dnl _(tea) _(xtea) dnl _(rc2) _(rc5) dnl _(skipjack) dnl _(cast128) _(cast256) dnl _(square) _(rijndael) _(rijndael192) _(rijndael256) dnl _(serpent) _(noekeon)') define(`cipher_modes', `_(ecb) _(cbc) _(cfb) _(ofb) _(counter)') define(`hashes', `dnl _(md5) _(md4) _(md2) _(tiger) _(has160) dnl _(sha) _(sha224) _(sha256) _(sha384) _(sha512) dnl _(whirlpool) _(whirlpool256) dnl _(rmd128) _(rmd160) _(rmd256) _(rmd320)') define(`hash_modes', `_(mgf) _(hmac)') MODES = \ adorn(`$(srcdir)/', join(`ciphers', `-', `cipher_modes'), `.c') \ adorn(`$(srcdir)/', join(`ciphers', `-', `cipher_modes'), `.h') \ adorn(`$(srcdir)/', join(`hashes', `-', `hash_modes'), `.c') \ adorn(`$(srcdir)/', join(`hashes', `-', `hash_modes'), `.h') $(MODES): modes-stamp modes-stamp: genmodes cd $(srcdir); ./genmodes "lit(`ciphers')" "lit(`cipher_modes')" cd $(srcdir); ./genmodes "lit(`hashes')" "lit(`hash_modes')" echo datestamp >modes-stamp define(`gen_tables', `dnl _(des) _(blowfish) _(twofish) dnl _(square) _(rijndael) _(whirlpool) dnl _(safer) _(mars) _(tiger) dnl _(gfshare) _(gfx-sqr)') autoheaders: \ addsuffix(`gen_tables', `-tab.h') \ primetab.h wheel.h mptypes.h mplimits.h define(`emit', ` _item`'-tab.h: _item`'-mktab$(EXEEXT) ./_item`'-mktab >_item`'-tab.h.new mv _item`'-tab.h.new _item`'-tab.h')dnl gen_tables primetab.h: primetab.c primetab.c: genprimes$(EXEEXT) ./genprimes -h primetab.h -c primetab.c \ -s CATACOMB_PRIMETAB_H -n 256 \ -t "unsigned short" -i primetab wheel.h: wheel.c wheel.c: genwheel$(EXEEXT) ./genwheel -h wheel.h -c wheel.c \ -s CATACOMB_WHEEL_H -n 5 \ -t "unsigned char" -i wheel archinclude_HEADERS = mptypes.h mplimits.h mptypes.h: mptypes$(EXEEXT) ./mptypes >mptypes.h.new mv mptypes.h.new mptypes.h mplimits.h: genlimits$(EXEEXT) ./genlimits h >mplimits.h.new mv mplimits.h.new mplimits.h mplimits.c: genlimits$(EXEEXT) ./genlimits c >mplimits.c.new mv mplimits.c.new mplimits.c ectab.c: ectab.in ec-gentab.awk mpdump$(EXEEXT) $(srcdir)/ec-gentab.awk <$(srcdir)/ectab.in >ectab.c.new mv ectab.c.new ectab.c ptab.c: ptab.in p-gentab.awk mpdump$(EXEEXT) $(srcdir)/p-gentab.awk <$(srcdir)/ptab.in >ptab.c.new mv ptab.c.new ptab.c bintab.c: bintab.in bin-gentab.awk mpdump$(EXEEXT) $(srcdir)/bin-gentab.awk <$(srcdir)/bintab.in >bintab.c.new mv bintab.c.new bintab.c gciphertab.c: gengctab $(srcdir)/gengctab gccipher gcipher >gciphertab.c.new \ "lit(join(`ciphers', `-', `cipher_modes')) \ lit(join(`hashes', `-', `_(mgf)')) \ rc4 seal" mv gciphertab.c.new gciphertab.c gmactab.c: gengctab $(srcdir)/gengctab gcmac gmac >gmactab.c.new \ "lit(join(`hashes', `-', `_(hmac)'))" mv gmactab.c.new gmactab.c ghashtab.c: gengctab $(srcdir)/gengctab gchash ghash >ghashtab.c.new \ "lit(`hashes') \ crc32=gcrc32" mv ghashtab.c.new ghashtab.c BUILT_SOURCES = \ getdate.c modes-stamp gciphertab.c gmactab.c ghashtab.c \ addsuffix(join(`ciphers', `-', `cipher_modes'), `.c') \ addsuffix(join(`ciphers', `-', `cipher_modes'), `.h') \ addsuffix(join(`hashes', `-', `hash_modes'), `.c') \ addsuffix(join(`hashes', `-', `hash_modes'), `.h') ## --- Building the main library --- lib_LTLIBRARIES = libcatacomb.la libcatacomb_la_LIBADD = $(CATACOMB_LIBS) libcatacomb_la_LDFLAGS = -version-info 3:1:1 ## Middle number is the patchlevel. Final number is the minor version. The ## difference between the first and last numbers is major version. pkginclude_HEADERS = \ arena.h paranoia.h buf.h qdparse.h keysz.h \ blkc.h hash.h gcipher.h ghash.h gmac.h grand.h ghash-def.h \ lcrand.h fibrand.h rc4.h seal.h rand.h noise.h fipstest.h maurer.h \ key.h key-error.h key-data.h passphrase.h pixie.h lmem.h \ mpx.h bitops.h mpw.h mpscan.h mparena.h mp.h mptext.h mpint.h \ exp.h mpbarrett.h mpmont.h mpreduce.h mp-exp.h \ mpcrt.h mprand.h mpmul.h \ gfx.h gf.h gfreduce.h gfn.h gf-exp.h \ primetab.h wheel.h pfilt.h rabin.h \ pgen.h primeiter.h prim.h strongprime.h limlee.h keycheck.h \ bbs.h rsa.h dh.h dsarand.h dsa.h gdsa.h gkcdsa.h \ tlsprf.h sslprf.h \ gfshare.h share.h \ rho.h \ field.h field-guts.h field-exp.h \ ec.h ec-guts.h ec-exp.h ec-test.h ectab.h ec-keys.h ec-raw.h \ ptab.h bintab.h group.h group-guts.h \ allwithsuffix(`ciphers', `cipher_modes', `.h') \ allwithsuffix(`hashes', `hash_modes', `.h') \ addsuffix(`cipher_modes', `-def.h') \ addsuffix(`hash_modes', `-def.h') crc32.h define(`MP_BASE', `mpx.c mpx-kmul.c mpx-ksqr.c mpscan.c mparena.c \ mp-misc.c mp-mem.c mp-const.c mp-arith.c mp-io.c \ mptext.c mptext-string.c') define(`MP_SOURCES', `qdparse.c \ mp-test.c mplimits.c \ mp-sqrt.c mp-gcd.c mp-jacobi.c mp-modsqrt.c mp-exp.c mp-modexp.c \ mpint.c mptext-file.c mptext-dstr.c \ mptext-len.c \ exp.c mpcrt.c mpmul.c mprand.c \ mpbarrett.c mpbarrett-exp.c mpbarrett-mexp.c mpbarrett-exp.h \ mpmont.c mpmont-exp.c mpmont-mexp.c mpmont-exp.h \ mpreduce.c mpreduce-exp.h \ group-stdops.c group-exp.c group-exp.h g-prime.c g-bin.c \ group-parse.c \ group-string.c group-file.c group-dstr.c \ rho.c buf.c ptab.c bintab.c \ GF_SOURCES PGEN_SOURCES EC_SOURCES') define(`GF_SOURCES', `gfx.c gfx-kmul.c gfx-sqr.c gf-arith.c gf-exp.c gf-gcd.c \ gfreduce.c gfreduce-exp.h gfn.c') define(`EC_SOURCES', `field.c field-parse.c field-exp.c \ f-prime.c f-niceprime.c f-binpoly.c \ ec.c ec-exp.c ec-prime.c ec-bin.c ec-test.c ec-info.c ectab.c \ ec-fetch.c ec-raw.c g-ec.c') define(`PGEN_SOURCES', `pfilt.c primeiter.c rabin.c \ pgen.c pgen-stdev.c pgen-gcd.c pgen-simul.c \ prim.c strongprime.c limlee.c \ keycheck.c keycheck-mp.c keycheck-report.c \ bbs-rand.c bbs-gen.c bbs-jump.c bbs-fetch.c \ rsa-priv.c rsa-pub.c rsa-gen.c rsa-recover.c rsa-fetch.c \ oaep.c pkcs1.c pss.c \ dh-gen.c dh-limlee.c dh-kcdsa.c dh-check.c dh-fetch.c dh-param.c \ dsarand.c dsa-misc.c dsa-sign.c dsa-verify.c dsa-gen.c dsa-check.c \ gdsa.c gkcdsa.c \ key-data.c key-flags.c key-text.c key-binary.c key-pass.c \ key-pack.c key-misc.c key-file.c key-attr.c key-io.c key-moan.c \ key-error.c key-fetch.c \ primetab.c wheel.c share.c') libcatacomb_la_SOURCES = \ grand.c keysz.c keysz-conv.c \ lcrand.c fibrand.c rc4.c seal.c rand.c noise.c fipstest.c maurer.c \ arena.c \ passphrase.c pixie-common.c lmem.c \ tlsprf.c sslprf.c \ gfshare.c \ MP_BASE MP_SOURCES karatsuba.h \ gciphertab.c ghashtab.c gmactab.c \ des-base.c des-base.h \ desx-tab.h \ rc2-tab.h \ skipjack-tab.h \ cast-s.c cast-sk.c cast-base.h cast-tab.h \ rijndael-base.c rijndael-base.h \ md2-tab.h \ serpent-sbox.h skipjack-tab.h tiger-base.h \ daftstory.h \ addsuffix(join(`ciphers', `-', `cipher_modes'), `.c') \ addsuffix(join(`hashes', `-', `hash_modes'), `.c') \ addsuffix(`ciphers', `.c') addsuffix(`hashes', `.c') crc32.c des-base.lo: des-tab.h blowfish.lo: blowfish-tab.h twofish.lo: twofish-tab.h square.lo: square-tab.h rijndael-base.lo: rijndael-tab.h whirlpool.lo: whirlpool-tab.h safer.lo: safer-tab.h mars.lo: mars-tab.h tiger.lo: tiger-tab.h gfshare.lo: gfshare-tab.h gfx-sqr.lo: gfx-sqr-tab.h ## --- Utility programs --- bin_PROGRAMS = \ dsig key pixie cookie rspit factorial hashsum mkphrase \ catcrypt catsign noinst_LIBRARIES = libcatcrypt.a pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = catacomb.pc noinst_PROGRAMS = \ genprimes genwheel mptypes genlimits serpent-check bittest mpdump \ perftest \ addsuffix(`gen_tables', `-mktab') LDADD = libcatcrypt.a libcatacomb.la define(`LIBCAT_SRC', `cc.h getdate.h dnl cc-sig.c cc-subcmd.c cc-enc.c cc-kem.c cc-hash.c \ cc-list.c cc-progress.c') libcatcrypt_a_SOURCES = LIBCAT_SRC getdate.y patsubst(MP_BASE MP_SOURCES, `\.c\>', `.lo') dsig.o keyutil.o rspit.o \ patsubst(LIBCAT_SRC, `\.c\>', `.o'): \ mptypes.h primetab.h wheel.h patsubst(MP_SOURCES, `\.c\>', `.lo'): mplimits.h dsig_SOURCES = dsig.c cookie_SOURCES = cookie.c catcrypt_SOURCES = catcrypt.c catsign_SOURCES = catsign.c key_SOURCES = keyutil.c hashsum_SOURCES = hashsum.c rspit_SOURCES = rspit.c factorial_SOURCES = factorial.c perftest_SOURCES = perftest.c perftest_LDADD = $(CATACOMB_LIBS) $(LDADD) pixie_SOURCES = pixie.c pixie-common.c lmem.c arena.c passphrase.c pixie_LDADD = $(PIXIE_LIBS) pixie_CFLAGS = $(AM_CFLAGS) mkphrase_SOURCES = mkphrase.c mkphrase_LDADD = $(CATACOMB_LIBS) $(LDADD) bittest_SOURCES = bittest.c bittest_LDADD = define(`emit', ` patsubst(_item, `[^a-zA-Z0-9]', `_')_mktab_SOURCES = _item`'-mktab.c patsubst(_item, `[^a-zA-Z0-9]', `_')_mktab_LDADD =')dnl gen_tables serpent_check_SOURCES = serpent-check.c serpent_check_LDADD = genprimes_SOURCES = genprimes.c genprimes_LDADD = genwheel_SOURCES = genwheel.c genwheel_LDADD = mptypes_SOURCES = mptypes.c mptypes_LDADD = genlimits_SOURCES = genlimits.c MP_BASE mptypes.h genlimits_LDADD = genlimits_CFLAGS = $(AM_CFLAGS) mpdump_SOURCES = mpdump.c MP_BASE mpdump_LDADD = mpdump_CFLAGS = $(AM_CFLAGS) ## --- Install the pixie setuid-root if we can --- ## ## Bodge around a bug in Automake: it doesn't call `install-exec-hook' from ## `install' if there are subdirectories. changequote(<, >) # install: install-exec-hook install-exec-hook: @pixie="$(DESTDIR)$(bindir)/`echo pixie|sed $(transform)`"; \ if chown root $$pixie && chmod 4755 $$pixie; then \ echo "chown root $$pixie"; \ echo "chmod 4755 $$pixie"; \ else \ echo "***"; \ echo "*** You should probably install $$pixie setuid-root."; \ echo "***"; \ fi changequote(`, ') ## --- Documentation --- man_MANS = \ key.1 dsig.1 cookie.1 catcrypt.1 catsign.1 hashsum.1 mkphrase.1 \ keyring.5 pixie.1 ## --- Prime group keyring --- pkgdata_DATA = pgroups.kr $(srcdir)/pgroups.kr: ptab.in mkpgroups cd $(srcdir) && rm -f pgroups.kr && ./mkpgroups $(distdir)/modes-stamp || true @for i in calc tests; do \ mkdir $(distdir)/$$i; \ ln $(srcdir)/$$i/*[!~] $(distdir)/$$i; \ done || true # kr=$$HOME/.catacomb/dsig-keyring; \ # if [ -r $$kr ]; then \ # cd $(distdir); \ # ../key -k $$kr extract -f -secret KEYRING; \ # find . -type f -print0 | ../dsig -k $$kr sign -0 -oMANIFEST; \ # fi ## --- Testing --- define(`testprogs', `') define(`CTESTRIG', `define(`testprogs', testprogs \ $1.t$(EXEEXT))dnl $1.to: $1.c $(COMPILE) -c -DTEST_RIG -DSRCDIR=\"$(srcdir)\" $(srcdir)/$1.c -o $1.to $1.t$(EXEEXT): $1.to libcatacomb.la $(CC) $(CFLAGS) $(LDFLAGS) $1.to .libs/libcatacomb.a $(CATACOMB_LIBS) $(LIBS) -o $1.t$(EXEEXT)') CTESTRIG(rc4) CTESTRIG(seal) adorn(`nl`'CTESTRIG(', `ciphers', `)') adorn(`nl`'CTESTRIG(', `hashes', `)') adorn(`nl`'CTESTRIG(', join(`ciphers', `-', `cipher_modes'), `)') adorn(`nl`'CTESTRIG(', join(`hashes', `-', `hash_modes'), `)') CTESTRIG(lcrand) CTESTRIG(tlsprf) CTESTRIG(sslprf) CTESTRIG(mpx) CTESTRIG(mpx-kmul) CTESTRIG(mpx-ksqr) CTESTRIG(mp-arith) CTESTRIG(mp-modsqrt) CTESTRIG(mp-gcd) CTESTRIG(mp-jacobi) CTESTRIG(mp-sqrt) CTESTRIG(mp-modexp) CTESTRIG(mptext) CTESTRIG(mpint) CTESTRIG(mpbarrett) CTESTRIG(mpbarrett-exp) CTESTRIG(mpbarrett-mexp) CTESTRIG(mpmont) CTESTRIG(mpmont-exp) CTESTRIG(mpmont-mexp) CTESTRIG(mpreduce) CTESTRIG(mpcrt) CTESTRIG(mpmul) CTESTRIG(rsa-test) CTESTRIG(gfx) CTESTRIG(gfx-sqr) CTESTRIG(gfx-kmul) CTESTRIG(gf-arith) CTESTRIG(gf-gcd) CTESTRIG(gfreduce) CTESTRIG(gfn) CTESTRIG(ec-prime) CTESTRIG(ec-bin) CTESTRIG(ec-test) CTESTRIG(ec-info) CTESTRIG(dh-param) CTESTRIG(group-test) CTESTRIG(gdsa) CTESTRIG(gkcdsa) CTESTRIG(pgen) CTESTRIG(primeiter) CTESTRIG(dsa-gen) CTESTRIG(dsa-sign) CTESTRIG(dsa-verify) CTESTRIG(bbs-rand) CTESTRIG(bbs-jump) CTESTRIG(gfshare) CTESTRIG(share) CTESTRIG(rho) TESTS = serpent-check bittest testprogs CLEANFILES = \ *.t$(EXEEXT) *.to *.kr.old \ mptypes.h primetab.c primetab.h wheel.c wheel.h \ ectab.c ptab.c bintab.c \ addsuffix(`gen_tables', `-tab.h') ## --- Makefile building (haha!) --- $(srcdir)/Makefile.am: $(srcdir)/Makefile.m4 m4 $(srcdir)/Makefile.m4 >$(srcdir)/Makefile.am.new mv $(srcdir)/Makefile.am.new $(srcdir)/Makefile.am DISTCLEANFILES = libtool MAINTAINERCLEANFILES = \ $(srcdir)/Makefile.am \ $(srcdir)/getdate.c getdate.c \ $(srcdir)/pgroups.kr \ $(MODES) modes-stamp $(srcdir)/modes-stamp ##----- That's all, folks ---------------------------------------------------