X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/e5b61a8dec3586f96d25bd3ef454176526ff0f69..8c5956c14f5834a072e1a9345ae1f356b14164ca:/math/Makefile.am diff --git a/math/Makefile.am b/math/Makefile.am index dfc5b58e..7c4ffed4 100644 --- a/math/Makefile.am +++ b/math/Makefile.am @@ -34,19 +34,44 @@ libmath_la_LIBADD = TEST_LIBS = libmath.la ###-------------------------------------------------------------------------- -### Main multiprecision integer library. +### Representation of multiprecision integers. + +## The `mpgen' tool for dealing with these things. +mpgen = $(srcdir)/mpgen +EXTRA_DIST += mpgen +AM_V_MPGEN = $(AM_V_MPGEN_@AM_V@) +AM_V_MPGEN_ = $(AM_V_MPGEN_@AM_DEFAULT_V@) +AM_V_MPGEN_0 = @echo " MPGEN $@"; +MPGEN = $(AM_V_MPGEN)$(PYTHON) $(mpgen) + +## The type information collected by `configure'. +CLEANFILES += typeinfo.py +EXTRA_DIST += typeinfo.py.in +typeinfo.py: $(srcdir)/typeinfo.py.in Makefile + $(SUBST) $(srcdir)/typeinfo.py.in >typeinfo.py.new \ + type_bits="@type_bits@" \ + limits="@limits@" && \ + mv typeinfo.py.new typeinfo.py + +## The header file containing our representation choices. +BUILT_SOURCES += mptypes.h +CLEANFILES += mptypes.h +nodist_archinclude_HEADERS += mptypes.h +mptypes.h: $(mpgen) typeinfo.py + $(MPGEN) mptypes >mptypes.h.in && mv mptypes.h.in mptypes.h + +## Limits of C types as multiprecision integers. +BUILT_SOURCES += mplimits.h mplimits.c +CLEANFILES += mplimits.h mplimits.c +nodist_archinclude_HEADERS += mplimits.h +nodist_libmath_la_SOURCES += mplimits.c +mplimits.h: $(mpgen) typeinfo.py + $(MPGEN) mplimits_h >mplimits.h.in && mv mplimits.h.in mplimits.h +mplimits.c: $(mpgen) typeinfo.py + $(MPGEN) mplimits_c >mplimits.c.in && mv mplimits.c.in mplimits.c -## This library is unfortunately intertwined with some of the code generation -## programs, so we must be rather careful. The important bits of the maths -## library needed by these programs is separated out into `libmpbase'. There -## is work going on to fix this unpleasant situation by generating the -## relevant files from Python scripts rather than C programs, using -## information gathered by `configure'. -noinst_LTLIBRARIES += libmpbase.la -libmath_la_LIBADD += libmpbase.la -libmpbase_la_LIBADD = $(mLib_LIBS) -libmpbase_la_SOURCES = -$(libmpbase_la_OBJECTS): mptypes.h +###-------------------------------------------------------------------------- +### Main multiprecision integer library. ## Additional buffer I/O functions for mathematical objects. pkginclude_HEADERS += buf.h @@ -58,84 +83,68 @@ libmath_la_SOURCES += exp.c ## Main user-visible multiprecision arithmetic. pkginclude_HEADERS += mp.h -libmpbase_la_SOURCES += mp-arith.c -TESTS += mp-arith.$t -libmpbase_la_SOURCES += mp-const.c +libmath_la_SOURCES += mp-arith.c +TESTS += mp-arith.t$(EXEEXT) +libmath_la_SOURCES += mp-const.c libmath_la_SOURCES += mp-exp.c mp-exp.h libmath_la_SOURCES += mp-gcd.c -TESTS += mp-gcd.$t -libmpbase_la_SOURCES += mp-io.c +TESTS += mp-gcd.t$(EXEEXT) +libmath_la_SOURCES += mp-io.c libmath_la_SOURCES += mp-jacobi.c -TESTS += mp-jacobi.$t -libmpbase_la_SOURCES += mp-mem.c -libmpbase_la_SOURCES += mp-misc.c +TESTS += mp-jacobi.t$(EXEEXT) +libmath_la_SOURCES += mp-mem.c +libmath_la_SOURCES += mp-misc.c libmath_la_SOURCES += mp-modexp.c -TESTS += mp-modexp.$t +TESTS += mp-modexp.t$(EXEEXT) libmath_la_SOURCES += mp-modsqrt.c -TESTS += mp-modsqrt.$t +TESTS += mp-modsqrt.t$(EXEEXT) libmath_la_SOURCES += mp-sqrt.c -TESTS += mp-sqrt.$t +TESTS += mp-sqrt.t$(EXEEXT) libmath_la_SOURCES += mp-test.c EXTRA_DIST += t/mp ## Computing Fibonacci numbers. pkginclude_HEADERS += mp-fibonacci.h libmath_la_SOURCES += mp-fibonacci.c -TESTS += mp-fibonacci.$t +TESTS += mp-fibonacci.t$(EXEEXT) ## Special memory allocation for multiprecision integers. pkginclude_HEADERS += mparena.h -libmpbase_la_SOURCES += mparena.c +libmath_la_SOURCES += mparena.c ## Barrett reduction, an efficient method for modular reduction. pkginclude_HEADERS += mpbarrett.h libmath_la_SOURCES += mpbarrett.c -TESTS += mpbarrett.$t +TESTS += mpbarrett.t$(EXEEXT) libmath_la_SOURCES += mpbarrett-exp.c mpbarrett-mexp.c mpbarrett-exp.h -TESTS += mpbarrett-exp.$t mpbarrett-mexp.$t -TESTS += mpbarrett.$t +TESTS += mpbarrett-exp.t$(EXEEXT) mpbarrett-mexp.t$(EXEEXT) +TESTS += mpbarrett.t$(EXEEXT) EXTRA_DIST += t/mpbarrett ## Solving congruences using the Chinese Remainder Theorem. pkginclude_HEADERS += mpcrt.h libmath_la_SOURCES += mpcrt.c -TESTS += mpcrt.$t +TESTS += mpcrt.t$(EXEEXT) EXTRA_DIST += t/mpcrt ## Conversions between machine-native and multiprecision integers. pkginclude_HEADERS += mpint.h libmath_la_SOURCES += mpint.c -TESTS += mpint.$t +TESTS += mpint.t$(EXEEXT) EXTRA_DIST += t/mpint -## Table of upper and lower limits of various types of machine integers, as -## multiprecision integers. -nodist_archinclude_HEADERS += mplimits.h -nodist_libmath_la_SOURCES += mplimits.c -CLEANFILES += mplimits.h mplimits.c -noinst_PROGRAMS += genlimits -genlimits_LDADD = libmpbase.la -mplimits.c: genlimits$e - $(AM_V_GEN)./genlimits c >mplimits.c.new && \ - mv mplimits.c.new mplimits.c -mplimits.h: genlimits$e - $(AM_V_GEN)./genlimits h >mplimits.h.new && \ - mv mplimits.h.new mplimits.h -$(genlimits_OBJECTS): mptypes.h -mplimits.lo: mplimits.h - ## Montgomery reduction, a clever method for modular arithmetic. pkginclude_HEADERS += mpmont.h libmath_la_SOURCES += mpmont.c -TESTS += mpmont.$t +TESTS += mpmont.t$(EXEEXT) libmath_la_SOURCES += mpmont-exp.c mpmont-mexp.c mpmont-exp.h -TESTS += mpmont-exp.$t mpmont-mexp.$t +TESTS += mpmont-exp.t$(EXEEXT) mpmont-mexp.t$(EXEEXT) EXTRA_DIST += t/mpmont ## Efficient multiplication of many small numbers. pkginclude_HEADERS += mpmul.h libmath_la_SOURCES += mpmul.c -TESTS += mpmul.$t +TESTS += mpmul.t$(EXEEXT) ## Generating random numbers. pkginclude_HEADERS += mprand.h @@ -145,42 +154,53 @@ libmath_la_SOURCES += mprand.c ## representations. pkginclude_HEADERS += mpreduce.h libmath_la_SOURCES += mpreduce.c mpreduce-exp.h -TESTS += mpreduce.$t +TESTS += mpreduce.t$(EXEEXT) EXTRA_DIST += t/mpreduce ## Iteratiion over the bianry representation of multiprecision integers. pkginclude_HEADERS += mpscan.h -libmpbase_la_SOURCES += mpscan.c +libmath_la_SOURCES += mpscan.c ## Conversion between multiprecision integers and their textual ## representations. pkginclude_HEADERS += mptext.h -libmpbase_la_SOURCES += mptext.c -TESTS += mptext.$t +libmath_la_SOURCES += mptext.c +TESTS += mptext.t$(EXEEXT) libmath_la_SOURCES += mptext-dstr.c libmath_la_SOURCES += mptext-file.c libmath_la_SOURCES += mptext-len.c -libmpbase_la_SOURCES += mptext-string.c +libmath_la_SOURCES += mptext-string.c EXTRA_DIST += t/mptext -## Basic types used in the representation of multiprecision integers. -nodist_archinclude_HEADERS += mptypes.h -BUILT_SOURCES += mptypes.h -CLEANFILES += mptypes.h -noinst_PROGRAMS += mptypes -mptypes.h: mptypes$e - $(AM_V_GEN)./mptypes >mptypes.h.new && mv mptypes.h.new mptypes.h - ## Low-level multiprecision arithmetic. pkginclude_HEADERS += mpx.h bitops.h mpw.h -libmpbase_la_SOURCES += mpx.c -TESTS += mpx.$t -libmpbase_la_SOURCES += karatsuba.h mpx-kmul.c mpx-ksqr.c -TESTS += mpx-kmul.$t mpx-ksqr.$t +libmath_la_SOURCES += mpx.c +TESTS += mpx.t$(EXEEXT) +libmath_la_SOURCES += karatsuba.h mpx-kmul.c mpx-ksqr.c +TESTS += mpx-kmul.t$(EXEEXT) mpx-ksqr.t$(EXEEXT) noinst_PROGRAMS += bittest TESTS += bittest EXTRA_DIST += t/mpx +if CPUFAM_X86 +MPX_MUL4_SOURCES = mpx-mul4-x86-sse2.S +check_PROGRAMS += mpx-mul4.t +TESTS += mpx-mul4.t$(EXEEXT) +endif +if CPUFAM_AMD64 +MPX_MUL4_SOURCES = mpx-mul4-amd64-sse2.S +check_PROGRAMS += mpx-mul4.t +TESTS += mpx-mul4.t$(EXEEXT) +endif +libmath_la_SOURCES += $(MPX_MUL4_SOURCES) +mpx_mul4_t_SOURCES = mpx-mul4-test.c $(MPX_MUL4_SOURCES) +mpx_mul4_t_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -DTEST_MUL4 -DSRCDIR="\"$(srcdir)\"" +mpx_mul4_t_LDFLAGS = $(TEST_LDFLAGS) +mpx_mul4_t_LDADD = $(top_builddir)/libcatacomb.la $(mLib_LIBS) +EXTRA_DIST += t/mpx-mul4 + ## A quick-and-dirty parser, used for parsing descriptions of groups, fields, ## etc. pkginclude_HEADERS += qdparse.h @@ -189,7 +209,7 @@ libmath_la_SOURCES += qdparse.c ## Pollard's `rho' algorithm for determining discrete logarithms. pkginclude_HEADERS += rho.h libmath_la_SOURCES += rho.c -TESTS += rho.$t +TESTS += rho.t$(EXEEXT) ###-------------------------------------------------------------------------- ### Prime number checking, searching, and related jobs. @@ -200,18 +220,19 @@ pkginclude_HEADERS += limlee.h libmath_la_SOURCES += limlee.c ## A table of small prime numbers. -pkginclude_HEADERS += $(precomp)/primetab.h -libmath_la_SOURCES += $(precomp)/primetab.c -PRECOMPS += $(precomp)/primetab.h $(precomp)/primetab.c +pkginclude_HEADERS += $(precomp)/math/primetab.h +nodist_libmath_la_SOURCES += ../precomp/math/primetab.c +PRECOMPS += $(precomp)/math/primetab.h \ + $(precomp)/math/primetab.c PRECOMP_PROGS += genprimes genprimes_LDADD = $(mLib_LIBS) if !CROSS_COMPILING -$(precomp)/primetab.h: $(precomp)/primetab.c -$(precomp)/primetab.c: - $(AM_V_at)$(MKDIR_P) $(precomp) - $(AM_V_at)$(MAKE) genprimes$e +$(precomp)/math/primetab.h: $(precomp)/math/primetab.c +$(precomp)/math/primetab.c: + $(AM_V_at)$(MKDIR_P) $(precomp)/math + $(AM_V_at)$(MAKE) genprimes$(EXEEXT) $(AM_V_GEN)./genprimes -sCATACOMB_PRIMETAB_H \ - -h$(precomp)/primetab.h -c$(precomp)/primetab.c \ + -h$(precomp)/math/primetab.h -c$(precomp)/math/primetab.c \ -n256 -t"unsigned short" -iprimetab endif @@ -225,9 +246,10 @@ libmath_la_SOURCES += pfilt.c pkginclude_HEADERS += pgen.h libmath_la_SOURCES += pgen.c libmath_la_SOURCES += pgen-gcd.c +libmath_la_SOURCES += pgen-granfrob.c libmath_la_SOURCES += pgen-simul.c libmath_la_SOURCES += pgen-stdev.c -TESTS += pgen.$t +TESTS += pgen.t$(EXEEXT) pgen-granfrob.t$(EXEEXT) EXTRA_DIST += t/pgen ## Finding primitive elements in finite fields. @@ -237,8 +259,8 @@ libmath_la_SOURCES += prim.c ## Iterating over all prime numbers from a given starting point. pkginclude_HEADERS += primeiter.h libmath_la_SOURCES += primeiter.c -TESTS += primeiter.$t -primeiter.lo: $(precomp)/wheel.h +TESTS += primeiter.t$(EXEEXT) +primeiter.lo: $(precomp)/math/wheel.h ## The Miller--Rabin primality test. pkginclude_HEADERS += rabin.h @@ -250,18 +272,18 @@ pkginclude_HEADERS += strongprime.h libmath_la_SOURCES += strongprime.c ## A `wheel', used by the prime iteration machinery. -pkginclude_HEADERS += $(precomp)/wheel.h -libmath_la_SOURCES += $(precomp)/wheel.c -PRECOMPS += $(precomp)/wheel.h $(precomp)/wheel.c +pkginclude_HEADERS += $(precomp)/math/wheel.h +nodist_libmath_la_SOURCES += ../precomp/math/wheel.c +PRECOMPS += $(precomp)/math/wheel.h $(precomp)/math/wheel.c PRECOMP_PROGS += genwheel genwheel_LDADD = $(mLib_LIBS) if !CROSS_COMPILING -$(precomp)/wheel.h: $(precomp)/wheel.c -$(precomp)/wheel.c: - $(AM_V_at)$(MKDIR_P) $(precomp) - $(AM_V_at)$(MAKE) genwheel$e +$(precomp)/math/wheel.h: $(precomp)/math/wheel.c +$(precomp)/math/wheel.c: + $(AM_V_at)$(MKDIR_P) $(precomp)/math + $(AM_V_at)$(MAKE) genwheel$(EXEEXT) $(AM_V_GEN)./genwheel -sCATACOMB_WHEEL_H \ - -h$(precomp)/wheel.h -c$(precomp)/wheel.c \ + -h$(precomp)/math/wheel.h -c$(precomp)/math/wheel.c \ -n5 -t"unsigned char" -iwheel endif @@ -271,42 +293,44 @@ endif ## User-visible binary polynomial arithmetic. pkginclude_HEADERS += gf.h libmath_la_SOURCES += gf-arith.c -TESTS += gf-arith.$t +TESTS += gf-arith.t$(EXEEXT) libmath_la_SOURCES += gf-exp.c gf-exp.h libmath_la_SOURCES += gf-gcd.c -TESTS += gf-gcd.$t +TESTS += gf-gcd.t$(EXEEXT) EXTRA_DIST += t/gf ## Low-level binary polynomial arithmetic. pkginclude_HEADERS += gfx.h libmath_la_SOURCES += gfx.c -TESTS += gfx.$t +TESTS += gfx.t$(EXEEXT) libmath_la_SOURCES += gfx-kmul.c -TESTS += gfx-kmul.$t -libmath_la_SOURCES += gfx-sqr.c $(precomp)/gfx-sqrtab.c -PRECOMPS += $(precomp)/gfx-sqrtab.c +TESTS += gfx-kmul.t$(EXEEXT) +libmath_la_SOURCES += gfx-sqr.c +nodist_libmath_la_SOURCES += ../precomp/math/gfx-sqrtab.c +PRECOMPS += $(precomp)/math/gfx-sqrtab.c PRECOMP_PROGS += gfx-sqr-mktab if !CROSS_COMPILING -$(precomp)/gfx-sqrtab.c: - $(AM_V_at)$(MKDIR_P) $(precomp) - $(AM_V_at)$(MAKE) gfx-sqr-mktab$e - $(AM_V_GEN)./gfx-sqr-mktab >$(precomp)/gfx-sqrtab.c.new && \ - mv $(precomp)/gfx-sqrtab.c.new $(precomp)/gfx-sqrtab.c +$(precomp)/math/gfx-sqrtab.c: + $(AM_V_at)$(MKDIR_P) $(precomp)/math + $(AM_V_at)$(MAKE) gfx-sqr-mktab$(EXEEXT) + $(AM_V_GEN)./gfx-sqr-mktab >$(precomp)/math/gfx-sqrtab.c.new && \ + mv $(precomp)/math/gfx-sqrtab.c.new \ + $(precomp)/math/gfx-sqrtab.c endif -TESTS += gfx-sqr.$t +TESTS += gfx-sqr.t$(EXEEXT) EXTRA_DIST += t/gfx ## Conversions between normal and polynomial basis representations for binary ## fields. pkginclude_HEADERS += gfn.h libmath_la_SOURCES += gfn.c -TESTS += gfn.$t +TESTS += gfn.t$(EXEEXT) EXTRA_DIST += t/gfn ## Efficient reduction modulo sparse polynomials. pkginclude_HEADERS += gfreduce.h libmath_la_SOURCES += gfreduce.c gfreduce-exp.h -TESTS += gfreduce.$t +TESTS += gfreduce.t$(EXEEXT) EXTRA_DIST += t/gfreduce ###-------------------------------------------------------------------------- @@ -324,7 +348,7 @@ libmath_la_SOURCES += g-bin.c libmath_la_SOURCES += g-prime.c libmath_la_SOURCES += g-ec.c EXTRA_DIST += group-test.c -TESTS += group-test.$t +TESTS += group-test.t$(EXEEXT) EXTRA_DIST += t/group ## Abstract finite fields. @@ -338,28 +362,21 @@ libmath_la_SOURCES += f-prime.c ## Table of built-in binary fields. pkginclude_HEADERS += bintab.h -libmath_la_SOURCES += bintab.c +nodist_libmath_la_SOURCES += bintab.c CLEANFILES += bintab.c -EXTRA_DIST += bintab.in bin-gentab.awk -bintab.c: bintab.in bin-gentab.awk mpdump$e - $(AM_V_GEN)awk -f $(srcdir)/bin-gentab.awk \ - <$(srcdir)/bintab.in >bintab.c.new && \ - mv bintab.c.new bintab.c +EXTRA_DIST += bintab.in +bintab.c: $(mpgen) typeinfo.py bintab.in + $(MPGEN) bintab $(srcdir)/bintab.in >bintab.c.new && \ + mv bintab.c.new bintab.c ## Table of built-in prime fields. pkginclude_HEADERS += ptab.h -libmath_la_SOURCES += ptab.c +nodist_libmath_la_SOURCES += ptab.c CLEANFILES += ptab.c -EXTRA_DIST += ptab.in p-gentab.awk -ptab.c: ptab.in p-gentab.awk mpdump$e - $(AM_V_GEN)awk -f $(srcdir)/p-gentab.awk \ - <$(srcdir)/ptab.in >ptab.c.new && \ - mv ptab.c.new ptab.c - -## A utility for building multiprecision integer constants. -noinst_PROGRAMS += mpdump -mpdump_LDADD = libmpbase.la -$(mpdump_OBJECTS): mptypes.h +EXTRA_DIST += ptab.in +ptab.c: $(mpgen) typeinfo.py ptab.in + $(MPGEN) ptab $(srcdir)/ptab.in >ptab.c.new && \ + mv ptab.c.new ptab.c ###-------------------------------------------------------------------------- ### Elliptic curve arithmetic. @@ -369,11 +386,11 @@ pkginclude_HEADERS += ec.h ec-guts.h libmath_la_SOURCES += ec.c libmath_la_SOURCES += ec-exp.c ec-exp.h libmath_la_SOURCES += ec-info.c -TESTS += ec-info.$t +TESTS += ec-info.t$(EXEEXT) libmath_la_SOURCES += ec-bin.c -TESTS += ec-bin.$t +TESTS += ec-bin.t$(EXEEXT) libmath_la_SOURCES += ec-prime.c -TESTS += ec-prime.$t +TESTS += ec-prime.t$(EXEEXT) EXTRA_DIST += t/ec ## The standard `raw' encoding (`EC2OSP') of elliptic curve points. @@ -387,16 +404,54 @@ libmath_la_SOURCES += ec-fetch.c ## Test infrastructure for elliptic curves. pkginclude_HEADERS += ec-test.h libmath_la_SOURCES += ec-test.c -TESTS += ec-test.$t +TESTS += ec-test.t$(EXEEXT) -## A table of built-in elliptic curves. +## Table of built-in elliptic-curve groups. pkginclude_HEADERS += ectab.h -libmath_la_SOURCES += ectab.c +nodist_libmath_la_SOURCES += ectab.c CLEANFILES += ectab.c -EXTRA_DIST += ectab.in ec-gentab.awk -ectab.c: ectab.in ec-gentab.awk mpdump$e - $(AM_V_GEN)awk -f $(srcdir)/ec-gentab.awk \ - <$(srcdir)/ectab.in >ectab.c.new && \ - mv ectab.c.new ectab.c +EXTRA_DIST += ectab.in +ectab.c: $(mpgen) typeinfo.py ectab.in + $(MPGEN) ectab $(srcdir)/ectab.in >ectab.c.new && \ + mv ectab.c.new ectab.c + +###-------------------------------------------------------------------------- +### Other strange things. + +pkginclude_HEADERS += qfarith.h + +pkginclude_HEADERS += f25519.h +libmath_la_SOURCES += f25519.c +TESTS += f25519.t$(EXEEXT) +TESTS += f25519-p10.t$(EXEEXT) +EXTRA_DIST += t/f25519 + +check_PROGRAMS += f25519-p10.t +f25519_p10_t_SOURCES = f25519.c +f25519_p10_t_CPPFLAGS = $(AM_CPPFLAGS) -DTEST_RIG -DSRCDIR="\"$(srcdir)\"" +f25519_p10_t_CPPFLAGS += -DF25519_IMPL=10 +f25519_p10_t_LDFLAGS = $(TEST_LDFLAGS) +f25519_p10_t_LDADD = $(TEST_LIBS) $(top_builddir)/libcatacomb.la +f25519_p10_t_LDADD += $(mLib_LIBS) $(CATACOMB_LIBS) $(LIBS) + +pkginclude_HEADERS += fgoldi.h +libmath_la_SOURCES += fgoldi.c +TESTS += fgoldi.t$(EXEEXT) +TESTS += fgoldi-p12.t$(EXEEXT) +EXTRA_DIST += t/fgoldi + +check_PROGRAMS += fgoldi-p12.t +fgoldi_p12_t_SOURCES = fgoldi.c +fgoldi_p12_t_CPPFLAGS = $(AM_CPPFLAGS) -DTEST_RIG -DSRCDIR="\"$(srcdir)\"" +fgoldi_p12_t_CPPFLAGS += -DFGOLDI_IMPL=12 +fgoldi_p12_t_LDFLAGS = $(TEST_LDFLAGS) +fgoldi_p12_t_LDADD = $(TEST_LIBS) $(top_builddir)/libcatacomb.la +fgoldi_p12_t_LDADD += $(mLib_LIBS) $(CATACOMB_LIBS) $(LIBS) + +pkginclude_HEADERS += scaf.h +libmath_la_SOURCES += scaf.c + +pkginclude_HEADERS += montladder.h +pkginclude_HEADERS += scmul.h ###----- That's all, folks --------------------------------------------------