Merge branch 'mdw/cpu-dispatch'
[catacomb] / symm / Makefile.am
index bd7710b..1d3374f 100644 (file)
@@ -102,22 +102,23 @@ pkginclude_HEADERS        += $(BLKC_H)
 
 ## Schneier's `Blowfish' block cipher.
 BLKCS                  += blowfish
-libsymm_la_SOURCES     += $(precomp)/blowfish-tab.c
-PRECOMPS               += $(precomp)/blowfish-tab.c
+nodist_libsymm_la_SOURCES += ../precomp/symm/blowfish-tab.c
+PRECOMPS               += $(precomp)/symm/blowfish-tab.c
 PRECOMP_PROGS          += blowfish-mktab
 blowfish_mktab_CPPFLAGS         = $(AM_CPPFLAGS) -DQUIET
 if !CROSS_COMPILING
-$(precomp)/blowfish-tab.c:
-       $(AM_V_at)$(MKDIR_P) $(precomp)
-       $(AM_V_at)$(MAKE) blowfish-mktab$e
-       $(AM_V_GEN)./blowfish-mktab >$(precomp)/blowfish-tab.c.new && \
-               mv $(precomp)/blowfish-tab.c.new $(precomp)/blowfish-tab.c
+$(precomp)/symm/blowfish-tab.c:
+       $(AM_V_at)$(MKDIR_P) $(precomp)/symm
+       $(AM_V_at)$(MAKE) blowfish-mktab$(EXEEXT)
+       $(AM_V_GEN)./blowfish-mktab >$(precomp)/symm/blowfish-tab.c.new && \
+               mv $(precomp)/symm/blowfish-tab.c.new \
+                       $(precomp)/symm/blowfish-tab.c
 endif
 
 ## Adams and Tavares' `CAST' block ciphers.
 BLKCS                  += cast128 cast256
 libsymm_la_SOURCES     += cast-s.c cast-sk.c cast-base.h
-cast256.$t: t/cast256
+cast256.t$(EXEEXT): t/cast256
 EXTRA_DIST             += t/cast256.aes
 MAINTAINERCLEANFILES   += $(srcdir)/t/cast256
 t/cast256: t/cast256.aes
@@ -128,15 +129,16 @@ t/cast256: t/cast256.aes
 
 ## IBM's `DES' block cipher, by Feistel, Coppersmith, and others.
 BLKCS                  += des des3
-libsymm_la_SOURCES     += des-base.h $(precomp)/des-tab.c
-PRECOMPS               += $(precomp)/des-tab.c
+libsymm_la_SOURCES     += des-base.h
+nodist_libsymm_la_SOURCES += ../precomp/symm/des-tab.c
+PRECOMPS               += $(precomp)/symm/des-tab.c
 PRECOMP_PROGS          += des-mktab
 if !CROSS_COMPILING
-$(precomp)/des-tab.c:
-       $(AM_V_at)$(MKDIR_P) $(precomp)
-       $(AM_V_at)$(MAKE) des-mktab$e
-       $(AM_V_GEN)./des-mktab >$(precomp)/des-tab.c.new && \
-               mv $(precomp)/des-tab.c.new $(precomp)/des-tab.c
+$(precomp)/symm/des-tab.c:
+       $(AM_V_at)$(MKDIR_P) $(precomp)/symm
+       $(AM_V_at)$(MAKE) des-mktab$(EXEEXT)
+       $(AM_V_GEN)./des-mktab >$(precomp)/symm/des-tab.c.new && \
+               mv $(precomp)/symm/des-tab.c.new $(precomp)/symm/des-tab.c
 endif
 
 ## Rivest's `DESX' variant, with pre- and post-whitening.
@@ -148,17 +150,17 @@ BLKCS                     += idea
 
 ## IBM's `MARS' block cipher.
 BLKCS                  += mars
-libsymm_la_SOURCES     += $(precomp)/mars-tab.c
-PRECOMPS               += $(precomp)/mars-tab.c
+nodist_libsymm_la_SOURCES += ../precomp/symm/mars-tab.c
+PRECOMPS               += $(precomp)/symm/mars-tab.c
 PRECOMP_PROGS          += mars-mktab
 if !CROSS_COMPILING
-$(precomp)/mars-tab.c:
-       $(AM_V_at)$(MKDIR_P) $(precomp)
-       $(AM_V_at)$(MAKE) mars-mktab$e
-       $(AM_V_GEN)./mars-mktab >$(precomp)/mars-tab.c.new && \
-               mv $(precomp)/mars-tab.c.new $(precomp)/mars-tab.c
+$(precomp)/symm/mars-tab.c:
+       $(AM_V_at)$(MKDIR_P) $(precomp)/symm
+       $(AM_V_at)$(MAKE) mars-mktab$(EXEEXT)
+       $(AM_V_GEN)./mars-mktab >$(precomp)/symm/mars-tab.c.new && \
+               mv $(precomp)/symm/mars-tab.c.new $(precomp)/symm/mars-tab.c
 endif
-mars.$t: t/mars
+mars.t$(EXEEXT): t/mars
 EXTRA_DIST             += t/mars.aes
 MAINTAINERCLEANFILES   += $(srcdir)/t/mars
 t/mars: t/mars.aes
@@ -180,17 +182,24 @@ BLKCS                     += rc5
 ## Daemen and Rijmen's `Rijndael' block cipher, selected as AES.
 BLKCS                  += rijndael rijndael192 rijndael256
 libsymm_la_SOURCES     += rijndael-base.h rijndael-base.c
-libsymm_la_SOURCES     += $(precomp)/rijndael-tab.c
-PRECOMPS               += $(precomp)/rijndael-tab.c
+if CPUFAM_X86
+libsymm_la_SOURCES     += rijndael-x86ish-aesni.S
+endif
+if CPUFAM_AMD64
+libsymm_la_SOURCES     += rijndael-x86ish-aesni.S
+endif
+nodist_libsymm_la_SOURCES += ../precomp/symm/rijndael-tab.c
+PRECOMPS               += $(precomp)/symm/rijndael-tab.c
 PRECOMP_PROGS          += rijndael-mktab
 if !CROSS_COMPILING
-$(precomp)/rijndael-tab.c:
-       $(AM_V_at)$(MKDIR_P) $(precomp)
-       $(AM_V_at)$(MAKE) rijndael-mktab$e
-       $(AM_V_GEN)./rijndael-mktab >$(precomp)/rijndael-tab.c.new && \
-               mv $(precomp)/rijndael-tab.c.new $(precomp)/rijndael-tab.c
+$(precomp)/symm/rijndael-tab.c:
+       $(AM_V_at)$(MKDIR_P) $(precomp)/symm
+       $(AM_V_at)$(MAKE) rijndael-mktab$(EXEEXT)
+       $(AM_V_GEN)./rijndael-mktab >$(precomp)/symm/rijndael-tab.c.new && \
+               mv $(precomp)/symm/rijndael-tab.c.new \
+                       $(precomp)/symm/rijndael-tab.c
 endif
-rijndael.$t: t/rijndael
+rijndael.t$(EXEEXT): t/rijndael
 EXTRA_DIST             += t/rijndael.aes
 MAINTAINERCLEANFILES   += $(srcdir)/t/rijndael
 t/rijndael: t/rijndael.aes
@@ -201,16 +210,17 @@ t/rijndael: t/rijndael.aes
 
 ## Massey's `SAFER' block ciphers.
 BLKCS                  += safer safersk
-libsymm_la_SOURCES     += $(precomp)/safer-tab.c
-PRECOMPS               += $(precomp)/safer-tab.c
+nodist_libsymm_la_SOURCES += ../precomp/symm/safer-tab.c
+PRECOMPS               += $(precomp)/symm/safer-tab.c
 PRECOMP_PROGS          += safer-mktab
 STUBS_HDR              += SAFER-SK,safersk,safer
 if !CROSS_COMPILING
-$(precomp)/safer-tab.c:
-       $(AM_V_at)$(MKDIR_P) $(precomp)
-       $(AM_V_at)$(MAKE) safer-mktab$e
-       $(AM_V_GEN)./safer-mktab >$(precomp)/safer-tab.c.new && \
-               mv $(precomp)/safer-tab.c.new $(precomp)/safer-tab.c
+$(precomp)/symm/safer-tab.c:
+       $(AM_V_at)$(MKDIR_P) $(precomp)/symm
+       $(AM_V_at)$(MAKE) safer-mktab$(EXEEXT)
+       $(AM_V_GEN)./safer-mktab >$(precomp)/symm/safer-tab.c.new && \
+               mv $(precomp)/symm/safer-tab.c.new \
+                       $(precomp)/symm/safer-tab.c
 endif
 
 ## Anderson, Biham and Knudsen's `Serpent' block cipher.
@@ -218,7 +228,7 @@ BLKCS                       += serpent
 libsymm_la_SOURCES     += serpent-sbox.h
 check_PROGRAMS         += serpent-check
 TESTS                  += serpent-check
-serpent.$t: t/serpent
+serpent.t$(EXEEXT): t/serpent
 EXTRA_DIST             += t/serpent.aes
 MAINTAINERCLEANFILES   += $(srcdir)/t/serpent
 t/serpent: t/serpent.aes
@@ -234,15 +244,16 @@ libsymm_la_SOURCES        += skipjack-tab.c
 
 ## Daemen and Rijmen's `Square' block cipher.
 BLKCS                  += square
-libsymm_la_SOURCES     += $(precomp)/square-tab.c
-PRECOMPS               += $(precomp)/square-tab.c
+nodist_libsymm_la_SOURCES += ../precomp/symm/square-tab.c
+PRECOMPS               += $(precomp)/symm/square-tab.c
 PRECOMP_PROGS          += square-mktab
 if !CROSS_COMPILING
-$(precomp)/square-tab.c:
-       $(AM_V_at)$(MKDIR_P) $(precomp)
-       $(AM_V_at)$(MAKE) square-mktab$e
-       $(AM_V_GEN)./square-mktab >$(precomp)/square-tab.c.new && \
-               mv $(precomp)/square-tab.c.new $(precomp)/square-tab.c
+$(precomp)/symm/square-tab.c:
+       $(AM_V_at)$(MKDIR_P) $(precomp)/symm
+       $(AM_V_at)$(MAKE) square-mktab$(EXEEXT)
+       $(AM_V_GEN)./square-mktab >$(precomp)/symm/square-tab.c.new && \
+               mv $(precomp)/symm/square-tab.c.new \
+                       $(precomp)/symm/square-tab.c
 endif
 
 ## Wheeler and Needham's `TEA' and `XTEA' block ciphers.
@@ -251,17 +262,18 @@ BLKCS                     += tea xtea
 ## Schneier, Kelsey, Whiting, Wagner, Hall and Ferguson's `Twofish' block
 ## cipher.
 BLKCS                  += twofish
-libsymm_la_SOURCES     += $(precomp)/twofish-tab.c
-PRECOMPS               += $(precomp)/twofish-tab.c
+nodist_libsymm_la_SOURCES += ../precomp/symm/twofish-tab.c
+PRECOMPS               += $(precomp)/symm/twofish-tab.c
 PRECOMP_PROGS          += twofish-mktab
 if !CROSS_COMPILING
-$(precomp)/twofish-tab.c:
-       $(AM_V_at)$(MKDIR_P) $(precomp)
-       $(AM_V_at)$(MAKE) twofish-mktab$e
-       $(AM_V_GEN)./twofish-mktab >$(precomp)/twofish-tab.c.new && \
-               mv $(precomp)/twofish-tab.c.new $(precomp)/twofish-tab.c
+$(precomp)/symm/twofish-tab.c:
+       $(AM_V_at)$(MKDIR_P) $(precomp)/symm
+       $(AM_V_at)$(MAKE) twofish-mktab$(EXEEXT)
+       $(AM_V_GEN)./twofish-mktab >$(precomp)/symm/twofish-tab.c.new && \
+               mv $(precomp)/symm/twofish-tab.c.new \
+                       $(precomp)/symm/twofish-tab.c
 endif
-twofish.$t: t/twofish
+twofish.t$(EXEEXT): t/twofish
 EXTRA_DIST             += t/twofish.aes
 MAINTAINERCLEANFILES   += $(srcdir)/t/twofish
 t/twofish: t/twofish.aes
@@ -316,29 +328,33 @@ STUBS_HDR         += SHA-384,sha384,sha512
 
 ## Anderson and Biham's `Tiger' hash function.
 HASHES                 += tiger
-libsymm_la_SOURCES     += tiger-base.h $(precomp)/tiger-tab.c
-PRECOMPS               += $(precomp)/tiger-tab.c
+libsymm_la_SOURCES     += tiger-base.h
+nodist_libsymm_la_SOURCES += ../precomp/symm/tiger-tab.c
+PRECOMPS               += $(precomp)/symm/tiger-tab.c
 PRECOMP_PROGS          += tiger-mktab
 if !CROSS_COMPILING
-$(precomp)/tiger-tab.c:
-       $(AM_V_at)$(MKDIR_P) $(precomp)
-       $(AM_V_at)$(MAKE) tiger-mktab$e
-       $(AM_V_GEN)./tiger-mktab >$(precomp)/tiger-tab.c.new && \
-               mv $(precomp)/tiger-tab.c.new $(precomp)/tiger-tab.c
+$(precomp)/symm/tiger-tab.c:
+       $(AM_V_at)$(MKDIR_P) $(precomp)/symm
+       $(AM_V_at)$(MAKE) tiger-mktab$(EXEEXT)
+       $(AM_V_GEN)./tiger-mktab >$(precomp)/symm/tiger-tab.c.new && \
+               mv $(precomp)/symm/tiger-tab.c.new \
+                       $(precomp)/symm/tiger-tab.c
 endif
 
 ## Barreto and Rijmen's `Whirlpool' hash function.
 HASHES                 += whirlpool whirlpool256
-libsymm_la_SOURCES     += $(precomp)/whirlpool-tab.c
-PRECOMPS               += $(precomp)/whirlpool-tab.c
+nodist_libsymm_la_SOURCES += ../precomp/symm/whirlpool-tab.c
+PRECOMPS               += $(precomp)/symm/whirlpool-tab.c
 PRECOMP_PROGS          += whirlpool-mktab
 STUBS_HDR              += Whirlpool-256,whirlpool256,whirlpool
 if !CROSS_COMPILING
-$(precomp)/whirlpool-tab.c:
-       $(AM_V_at)$(MKDIR_P) $(precomp)
-       $(AM_V_at)$(MAKE) whirlpool-mktab$e
-       $(AM_V_GEN)./whirlpool-mktab >$(precomp)/whirlpool-tab.c.new && \
-               mv $(precomp)/whirlpool-tab.c.new $(precomp)/whirlpool-tab.c
+$(precomp)/symm/whirlpool-tab.c:
+       $(AM_V_at)$(MKDIR_P) $(precomp)/symm
+       $(AM_V_at)$(MAKE) whirlpool-mktab$(EXEEXT)
+       $(AM_V_GEN)./whirlpool-mktab \
+                       >$(precomp)/symm/whirlpool-tab.c.new && \
+               mv $(precomp)/symm/whirlpool-tab.c.new \
+                       $(precomp)/symm/whirlpool-tab.c
 endif
 
 ## Bellare, Canetti and Krawczyk's `HMAC' mode for message authentication.
@@ -358,17 +374,75 @@ ALL_HASHES                += crc32=gcrc32
 ## Rivest's `RC4' stream cipher.
 pkginclude_HEADERS     += rc4.h
 libsymm_la_SOURCES     += rc4.c
-TESTS                  += rc4.$t
+TESTS                  += rc4.t$(EXEEXT)
 EXTRA_DIST             += t/rc4
 ALL_CIPHERS            += rc4
 
 ## Coppersmith and Rogaway's `SEAL' pseudorandom function.
 pkginclude_HEADERS     += seal.h
 libsymm_la_SOURCES     += seal.c
-TESTS                  += seal.$t
+TESTS                  += seal.t$(EXEEXT)
 EXTRA_DIST             += t/seal
 ALL_CIPHERS            += seal
 
+## Bernstein's `Salsa20' stream cipher.  Most of the test vectors come from
+## the eSTREAM project, captured by the Internet Archive's Wayback Machine at
+##
+##   http://web.archive.org/web/20070814004154/http://www.ecrypt.eu.org/stream/svn/viewcvs.cgi/ecrypt/trunk/submissions/salsa20.tar.gz?view=tar
+##
+## and automatically converted into the format we want.
+EXTRA_DIST             += salsa20-tvconv
+pkginclude_HEADERS     += salsa20.h salsa20-core.h
+libsymm_la_SOURCES     += salsa20.c
+if CPUFAM_X86
+libsymm_la_SOURCES     += salsa20-x86ish-sse2.S
+endif
+if CPUFAM_AMD64
+libsymm_la_SOURCES     += salsa20-x86ish-sse2.S
+endif
+TESTS                  += salsa20.t$(EXEEXT)
+ALL_CIPHERS            += salsa20 salsa2012 salsa208
+ALL_CIPHERS            += xsalsa20 xsalsa2012 xsalsa208
+STUBS_HDR              += Salsa20/12,salsa2012,salsa20
+STUBS_HDR              += Salsa20/8,salsa208,salsa20
+STUBS_HDR              += XSalsa20,xsalsa20,salsa20
+STUBS_HDR              += XSalsa20/12,xsalsa2012,salsa20
+STUBS_HDR              += XSalsa20/8,xsalsa208,salsa20
+EXTRA_DIST             += t/salsa20
+MAINTAINERCLEANFILES   += t/salsa20
+salsa20.t$(EXEEXT): t/salsa20
+SALSA20_ESTREAM_TV      = t/salsa20.estream
+SALSA20_ESTREAM_TV     += t/salsa2012.estream
+SALSA20_ESTREAM_TV     += t/salsa208.estream
+EXTRA_DIST             += t/salsa20.local $(SALSA20_ESTREAM_TV)
+t/salsa20: salsa20-tvconv t/salsa20.local $(SALSA20_ESTREAM_TV)
+       $(AM_V_GEN)cd $(srcdir) && \
+               { echo "### GENERATED by salsa20-tvconv" && \
+                 cat t/salsa20.local && \
+                 ./salsa20-tvconv $(SALSA20_ESTREAM_TV); \
+               } >t/salsa20.new && \
+               mv t/salsa20.new t/salsa20
+
+## Bernstein's `ChaCha' stream cipher.
+pkginclude_HEADERS     += chacha.h chacha-core.h
+libsymm_la_SOURCES     += chacha.c
+if CPUFAM_X86
+libsymm_la_SOURCES     += chacha-x86ish-sse2.S
+endif
+if CPUFAM_AMD64
+libsymm_la_SOURCES     += chacha-x86ish-sse2.S
+endif
+TESTS                  += chacha.t$(EXEEXT)
+EXTRA_DIST             += t/chacha
+ALL_CIPHERS            += chacha20 chacha12 chacha8
+ALL_CIPHERS            += xchacha20 xchacha12 xchacha8
+STUBS_HDR              += ChaCha20,chacha20,chacha
+STUBS_HDR              += ChaCha12,chacha12,chacha
+STUBS_HDR              += ChaCha8,chacha8,chacha
+STUBS_HDR              += XChaCha20,xchacha20,chacha
+STUBS_HDR              += XChaCha12,xchacha12,chacha
+STUBS_HDR              += XChaCha8,xchacha8,chacha
+
 ###--------------------------------------------------------------------------
 ### Autogenerated mode implementations.
 
@@ -469,6 +543,6 @@ EXTRA_DIST          += $(SYMM_TEST_FILES)
 EXTRA_DIST             += daftstory.h
 
 ## Clean the debris from the `modes' subdirectory.
-CLEANFILES             += modes/*.to modes/*.$t
+CLEANFILES             += modes/*.to modes/*.t$(EXEEXT)
 
 ###----- That's all, folks --------------------------------------------------