symm: Implement Bernstein's ChaCha stream cipher.
[catacomb] / symm / Makefile.am
index c4043d2..63bf26b 100644 (file)
@@ -46,13 +46,19 @@ EXTRA_DIST          += multigen
 ## we generate it using `multigen'.  Unfortunately, this needs to be done
 ## at the Automake level, which causes some interesting bootstrapping
 ## problems.
+##
+## Of course, now that we have this machinery for the complicated modes
+## generation, we might as well use it for simpler things.
 include modes.am
+include stubs.am
 
 EXTRA_DIST             += modes.am.in modes.am
+EXTRA_DIST             += stubs.am.in stubs.am
 MAINTAINERCLEANFILES   += $(srcdir)/modes.am
+MAINTAINERCLEANFILES   += $(srcdir)/stubs.am
 
 ## Generate the lists.
-$(srcdir)/modes.am: modes.am.in
+$(srcdir)/modes.am: modes.am.in Makefile.am
        $(AM_V_GEN)$(multigen) -g $(srcdir)/modes.am.in $(srcdir)/modes.am \
                blkc="$(BLKCS)" \
                        blkcmode="$(BLKCMODES)" \
@@ -61,12 +67,19 @@ $(srcdir)/modes.am: modes.am.in
                        hashmode="$(HASHMODES)" \
                        hashciphermode="$(HASHCIPHERMODES)" \
                        hashmacmode="$(HASHMACMODES)"
+$(srcdir)/stubs.am: stubs.am.in Makefile.am
+       $(AM_V_GEN)$(multigen) -g $(srcdir)/stubs.am.in $(srcdir)/stubs.am \
+               descr,hname,base="$(STUBS_HDR)" cname="$(STUBS_SRC)"
 
 ## Initialize lists of known classes.
 ALL_CIPHERS             = $(CIPHER_MODES)
 ALL_HASHES              = $(HASHES)
 ALL_MACS                = $(MAC_MODES)
 
+## Stub headers and sources.
+STUBS_HDR               =
+STUBS_SRC               =
+
 ###--------------------------------------------------------------------------
 ### Block ciphers.
 
@@ -191,6 +204,7 @@ BLKCS                       += safer safersk
 libsymm_la_SOURCES     += $(precomp)/safer-tab.c
 PRECOMPS               += $(precomp)/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)
@@ -297,6 +311,8 @@ HASHES                      += sha
 ## The National Security Agency's `SHA-2' suite.
 HASHES                 += sha224 sha256
 HASHES                 += sha384 sha512
+STUBS_HDR              += SHA-224,sha224,sha256
+STUBS_HDR              += SHA-384,sha384,sha512
 
 ## Anderson and Biham's `Tiger' hash function.
 HASHES                 += tiger
@@ -316,6 +332,7 @@ HASHES                      += whirlpool whirlpool256
 libsymm_la_SOURCES     += $(precomp)/whirlpool-tab.c
 PRECOMPS               += $(precomp)/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)
@@ -352,6 +369,52 @@ TESTS                      += seal.$t
 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
+TESTS                  += salsa20.$t
+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: 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
+TESTS                  += chacha.$t
+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.
 
@@ -359,7 +422,7 @@ ALL_CIPHERS         += seal
 EXTRA_DIST             += mode.h.in mode.c.in
 EXTRA_DIST             += modes/gen-stamp
 MAINTAINERCLEANFILES   += modes/gen-stamp
-modes/gen-stamp:
+modes/gen-stamp: Makefile.am
        $(AM_V_at)$(MKDIR_P) $(srcdir)/modes
        $(AM_V_GEN)$(multigen) -g $(srcdir)/mode.c.in \
                $(srcdir)/modes/@base-@mode.c \
@@ -380,19 +443,38 @@ pkginclude_HEADERS        += $(MODE_H)
 
 ## Generated implementations.
 BUILT_SOURCES          += $(GENMODES_C)
-EXTRA_DIST             += $(GENMODES_C)
 MAINTAINERCLEANFILES   += $(GENMODES_C)
-nodist_libsymm_la_SOURCES += $(GENMODES_C)
+libsymm_la_SOURCES     += $(GENMODES_C)
 $(GENMODES_C): modes/gen-stamp
 
 ## Generated interfaces.
 BUILT_SOURCES          += $(GENMODES_H)
-EXTRA_DIST             += $(GENMODES_H)
 MAINTAINERCLEANFILES   += $(GENMODES_H)
-nodist_pkginclude_HEADERS += $(GENMODES_H)
+pkginclude_HEADERS     += $(GENMODES_H)
 $(GENMODES_H): modes/gen-stamp
 
 ###--------------------------------------------------------------------------
+### Autogenerated stub headers.
+
+## The master stamp file.
+EXTRA_DIST             += stub.h.in
+EXTRA_DIST             += stubs.gen-stamp
+MAINTAINERCLEANFILES   += stubs.gen-stamp
+stubs.gen-stamp: Makefile.am
+       $(AM_V_at)$(MKDIR_P) $(srcdir)/stubs
+       $(AM_V_GEN)$(multigen) -g $(srcdir)/stub.h.in \
+               $(srcdir)/@name.h descr,name,base="$(STUBS_HDR)"
+       $(AM_V_GEN)$(multigen) -g $(srcdir)/stub.c.in \
+               $(srcdir)/@name.c name="$(STUBS_SRC)"
+       $(AM_V_at)touch $(srcdir)/stubs.gen-stamp
+
+## Generated stub headers.
+BUILT_SOURCES          += $(STUB_H) $(STUB_C)
+MAINTAINERCLEANFILES   += $(STUB_H) $(STUB_C)
+pkginclude_HEADERS     += $(STUB_H)
+$(STUB_H) $(STUB_C): stubs.gen-stamp
+
+###--------------------------------------------------------------------------
 ### Tables of classes for encryption, hashing, and message authentication.
 
 ## The skeleton for the class tables.
@@ -402,7 +484,7 @@ EXTRA_DIST          += gthingtab.c.in
 pkginclude_HEADERS     += gcipher.h
 CLEANFILES             += gciphertab.c
 nodist_libsymm_la_SOURCES += gciphertab.c
-gciphertab.c: gthingtab.c.in
+gciphertab.c: gthingtab.c.in Makefile.am
        $(AM_V_GEN)$(multigen) -g $(srcdir)/gthingtab.c.in gciphertab.c \
                what=gcipher cls=gccipher thing="$(ALL_CIPHERS)"
 
@@ -410,7 +492,7 @@ gciphertab.c: gthingtab.c.in
 pkginclude_HEADERS     += ghash.h ghash-def.h
 CLEANFILES             += ghashtab.c
 nodist_libsymm_la_SOURCES += ghashtab.c
-ghashtab.c: gthingtab.c.in
+ghashtab.c: gthingtab.c.in Makefile.am
        $(AM_V_GEN)$(multigen) -g $(srcdir)/gthingtab.c.in ghashtab.c \
                what=ghash cls=gchash thing="$(ALL_HASHES)"
 
@@ -418,7 +500,7 @@ ghashtab.c: gthingtab.c.in
 pkginclude_HEADERS     += gmac.h
 CLEANFILES             += gmactab.c
 nodist_libsymm_la_SOURCES += gmactab.c
-gmactab.c: gthingtab.c.in
+gmactab.c: gthingtab.c.in Makefile.am
        $(AM_V_GEN)$(multigen) -g $(srcdir)/gthingtab.c.in gmactab.c \
                what=gmac cls=gcmac thing="$(ALL_MACS)"