debian/changelog: Prepare for next minor version.
[catacomb] / math / Makefile.am
... / ...
CommitLineData
1### -*-makefile-*-
2###
3### Build script for mathematical infrastructure
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
27include $(top_srcdir)/vars.am
28
29noinst_LTLIBRARIES = libmath.la
30libmath_la_SOURCES =
31nodist_libmath_la_SOURCES =
32libmath_la_LIBADD =
33
34TEST_LIBS = libmath.la
35
36###--------------------------------------------------------------------------
37### Representation of multiprecision integers.
38
39## The `mpgen' tool for dealing with these things.
40mpgen = $(srcdir)/mpgen
41EXTRA_DIST += mpgen
42AM_V_MPGEN = $(AM_V_MPGEN_@AM_V@)
43AM_V_MPGEN_ = $(AM_V_MPGEN_@AM_DEFAULT_V@)
44AM_V_MPGEN_0 = @echo " MPGEN $@";
45MPGEN = $(AM_V_MPGEN)$(PYTHON) $(mpgen)
46
47## The type information collected by `configure'.
48CLEANFILES += typeinfo.py
49EXTRA_DIST += typeinfo.py.in
50typeinfo.py: $(srcdir)/typeinfo.py.in Makefile
51 $(SUBST) $(srcdir)/typeinfo.py.in >typeinfo.py.new \
52 type_bits="@type_bits@" \
53 limits="@limits@" && \
54 mv typeinfo.py.new typeinfo.py
55
56## The header file containing our representation choices.
57BUILT_SOURCES += mptypes.h
58CLEANFILES += mptypes.h
59nodist_archinclude_HEADERS += mptypes.h
60mptypes.h: $(mpgen) typeinfo.py
61 $(MPGEN) mptypes >mptypes.h.in && mv mptypes.h.in mptypes.h
62
63## Limits of C types as multiprecision integers.
64BUILT_SOURCES += mplimits.h mplimits.c
65CLEANFILES += mplimits.h mplimits.c
66nodist_archinclude_HEADERS += mplimits.h
67nodist_libmath_la_SOURCES += mplimits.c
68mplimits.h: $(mpgen) typeinfo.py
69 $(MPGEN) mplimits_h >mplimits.h.in && mv mplimits.h.in mplimits.h
70mplimits.c: $(mpgen) typeinfo.py
71 $(MPGEN) mplimits_c >mplimits.c.in && mv mplimits.c.in mplimits.c
72
73###--------------------------------------------------------------------------
74### Main multiprecision integer library.
75
76## Additional buffer I/O functions for mathematical objects.
77pkginclude_HEADERS += buf.h
78libmath_la_SOURCES += buf.c
79
80## Infrastructure for fast exponentiation.
81pkginclude_HEADERS += exp.h
82libmath_la_SOURCES += exp.c
83
84## Main user-visible multiprecision arithmetic.
85pkginclude_HEADERS += mp.h
86libmath_la_SOURCES += mp-arith.c
87TESTS += mp-arith.t$(EXEEXT)
88libmath_la_SOURCES += mp-const.c
89libmath_la_SOURCES += mp-exp.c mp-exp.h
90libmath_la_SOURCES += mp-gcd.c
91TESTS += mp-gcd.t$(EXEEXT)
92libmath_la_SOURCES += mp-io.c
93libmath_la_SOURCES += mp-jacobi.c
94TESTS += mp-jacobi.t$(EXEEXT)
95libmath_la_SOURCES += mp-mem.c
96libmath_la_SOURCES += mp-misc.c
97libmath_la_SOURCES += mp-modexp.c
98TESTS += mp-modexp.t$(EXEEXT)
99libmath_la_SOURCES += mp-modsqrt.c
100TESTS += mp-modsqrt.t$(EXEEXT)
101libmath_la_SOURCES += mp-sqrt.c
102TESTS += mp-sqrt.t$(EXEEXT)
103libmath_la_SOURCES += mp-nthrt.c
104TESTS += mp-nthrt.t$(EXEEXT)
105libmath_la_SOURCES += mp-test.c
106EXTRA_DIST += t/mp
107
108## Computing Fibonacci numbers.
109pkginclude_HEADERS += mp-fibonacci.h
110libmath_la_SOURCES += mp-fibonacci.c
111TESTS += mp-fibonacci.t$(EXEEXT)
112
113## Special memory allocation for multiprecision integers.
114pkginclude_HEADERS += mparena.h
115libmath_la_SOURCES += mparena.c
116
117## Barrett reduction, an efficient method for modular reduction.
118pkginclude_HEADERS += mpbarrett.h
119libmath_la_SOURCES += mpbarrett.c
120TESTS += mpbarrett.t$(EXEEXT)
121libmath_la_SOURCES += mpbarrett-exp.c mpbarrett-mexp.c mpbarrett-exp.h
122TESTS += mpbarrett-exp.t$(EXEEXT) mpbarrett-mexp.t$(EXEEXT)
123TESTS += mpbarrett.t$(EXEEXT)
124EXTRA_DIST += t/mpbarrett
125
126## Solving congruences using the Chinese Remainder Theorem.
127pkginclude_HEADERS += mpcrt.h
128libmath_la_SOURCES += mpcrt.c
129TESTS += mpcrt.t$(EXEEXT)
130EXTRA_DIST += t/mpcrt
131
132## Conversions between machine-native and multiprecision integers.
133pkginclude_HEADERS += mpint.h
134libmath_la_SOURCES += mpint.c
135TESTS += mpint.t$(EXEEXT)
136EXTRA_DIST += t/mpint
137
138## Montgomery reduction, a clever method for modular arithmetic.
139pkginclude_HEADERS += mpmont.h
140libmath_la_SOURCES += mpmont.c
141TESTS += mpmont.t$(EXEEXT)
142libmath_la_SOURCES += mpmont-exp.c mpmont-mexp.c mpmont-exp.h
143TESTS += mpmont-exp.t$(EXEEXT) mpmont-mexp.t$(EXEEXT)
144EXTRA_DIST += t/mpmont
145
146## Efficient multiplication of many small numbers.
147pkginclude_HEADERS += mpmul.h
148libmath_la_SOURCES += mpmul.c
149TESTS += mpmul.t$(EXEEXT)
150
151## Generating random numbers.
152pkginclude_HEADERS += mprand.h
153libmath_la_SOURCES += mprand.c
154
155## Efficient reduction modulo numbers with conveninent binary
156## representations.
157pkginclude_HEADERS += mpreduce.h
158libmath_la_SOURCES += mpreduce.c mpreduce-exp.h
159TESTS += mpreduce.t$(EXEEXT)
160EXTRA_DIST += t/mpreduce
161
162## Iteratiion over the bianry representation of multiprecision integers.
163pkginclude_HEADERS += mpscan.h
164libmath_la_SOURCES += mpscan.c
165
166## Conversion between multiprecision integers and their textual
167## representations.
168pkginclude_HEADERS += mptext.h
169libmath_la_SOURCES += mptext.c
170TESTS += mptext.t$(EXEEXT)
171libmath_la_SOURCES += mptext-dstr.c
172libmath_la_SOURCES += mptext-file.c
173libmath_la_SOURCES += mptext-len.c
174libmath_la_SOURCES += mptext-string.c
175EXTRA_DIST += t/mptext
176
177## Low-level multiprecision arithmetic.
178pkginclude_HEADERS += mpx.h bitops.h mpw.h
179libmath_la_SOURCES += mpx.c
180TESTS += mpx.t$(EXEEXT)
181libmath_la_SOURCES += karatsuba.h mpx-kmul.c mpx-ksqr.c
182TESTS += mpx-kmul.t$(EXEEXT) mpx-ksqr.t$(EXEEXT)
183noinst_PROGRAMS += bittest
184TESTS += bittest
185EXTRA_DIST += t/mpx
186
187if CPUFAM_X86
188MPX_MUL4_SOURCES = mpx-mul4-x86-sse2.S
189check_PROGRAMS += mpx-mul4.t
190TESTS += mpx-mul4.t$(EXEEXT)
191endif
192if CPUFAM_AMD64
193MPX_MUL4_SOURCES = mpx-mul4-amd64-sse2.S
194check_PROGRAMS += mpx-mul4.t
195TESTS += mpx-mul4.t$(EXEEXT)
196endif
197if CPUFAM_ARMEL
198MPX_MUL4_SOURCES = mpx-mul4-arm-neon.S
199check_PROGRAMS += mpx-mul4.t
200TESTS += mpx-mul4.t$(EXEEXT)
201endif
202if CPUFAM_ARM64
203MPX_MUL4_SOURCES = mpx-mul4-arm64-simd.S
204check_PROGRAMS += mpx-mul4.t
205TESTS += mpx-mul4.t$(EXEEXT)
206endif
207libmath_la_SOURCES += $(MPX_MUL4_SOURCES)
208mpx_mul4_t_SOURCES = mpx-mul4-test.c $(MPX_MUL4_SOURCES)
209mpx_mul4_t_CPPFLAGS = \
210 $(AM_CPPFLAGS) \
211 -DTEST_MUL4 -DSRCDIR="\"$(srcdir)\""
212mpx_mul4_t_LDFLAGS = $(TEST_LDFLAGS)
213mpx_mul4_t_LDADD = $(top_builddir)/libcatacomb.la $(mLib_LIBS)
214EXTRA_DIST += t/mpx-mul4
215
216## A quick-and-dirty parser, used for parsing descriptions of groups, fields,
217## etc.
218pkginclude_HEADERS += qdparse.h
219libmath_la_SOURCES += qdparse.c
220
221## Pollard's `rho' algorithm for determining discrete logarithms.
222pkginclude_HEADERS += rho.h
223libmath_la_SOURCES += rho.c
224TESTS += rho.t$(EXEEXT)
225
226###--------------------------------------------------------------------------
227### Prime number checking, searching, and related jobs.
228
229## Generating Lim--Lee groups, i.e., unit groups of finite fields without
230## small subgroups (except for the obvious ones).
231pkginclude_HEADERS += limlee.h
232libmath_la_SOURCES += limlee.c
233
234## A table of small prime numbers.
235pkginclude_HEADERS += $(precomp)/math/primetab.h
236nodist_libmath_la_SOURCES += ../precomp/math/primetab.c
237PRECOMPS += $(precomp)/math/primetab.h \
238 $(precomp)/math/primetab.c
239PRECOMP_PROGS += genprimes
240genprimes_LDADD = $(mLib_LIBS)
241if !CROSS_COMPILING
242$(precomp)/math/primetab.h: $(precomp)/math/primetab.c
243$(precomp)/math/primetab.c:
244 $(AM_V_at)$(MKDIR_P) $(precomp)/math
245 $(AM_V_at)$(MAKE) genprimes$(EXEEXT)
246 $(AM_V_GEN)./genprimes -sCATACOMB_PRIMETAB_H \
247 -h$(precomp)/math/primetab.h -c$(precomp)/math/primetab.c \
248 -n256 -t"unsigned short" -iprimetab
249endif
250
251## Filtering candidate prime numbers by checking for small factors
252## efficiently.
253pkginclude_HEADERS += pfilt.h
254libmath_la_SOURCES += pfilt.c
255
256## Generating prime numbers (and other kinds of numbers which need searching
257## for).
258pkginclude_HEADERS += pgen.h
259libmath_la_SOURCES += pgen.c
260libmath_la_SOURCES += pgen-gcd.c
261libmath_la_SOURCES += pgen-granfrob.c
262libmath_la_SOURCES += pgen-simul.c
263libmath_la_SOURCES += pgen-stdev.c
264TESTS += pgen.t$(EXEEXT) pgen-granfrob.t$(EXEEXT)
265EXTRA_DIST += t/pgen
266
267## Finding primitive elements in finite fields.
268pkginclude_HEADERS += prim.h
269libmath_la_SOURCES += prim.c
270
271## Iterating over all prime numbers from a given starting point.
272pkginclude_HEADERS += primeiter.h
273libmath_la_SOURCES += primeiter.c
274TESTS += primeiter.t$(EXEEXT)
275primeiter.lo: $(precomp)/math/wheel.h
276
277## The Miller--Rabin primality test.
278pkginclude_HEADERS += rabin.h
279libmath_la_SOURCES += rabin.c
280
281## Finding `strong' primes, using Gordon's algorithm. Once upon a time,
282## products of these kinds of numbers were harder to factor.
283pkginclude_HEADERS += strongprime.h
284libmath_la_SOURCES += strongprime.c
285
286## A `wheel', used by the prime iteration machinery.
287pkginclude_HEADERS += $(precomp)/math/wheel.h
288nodist_libmath_la_SOURCES += ../precomp/math/wheel.c
289PRECOMPS += $(precomp)/math/wheel.h $(precomp)/math/wheel.c
290PRECOMP_PROGS += genwheel
291genwheel_LDADD = $(mLib_LIBS)
292if !CROSS_COMPILING
293$(precomp)/math/wheel.h: $(precomp)/math/wheel.c
294$(precomp)/math/wheel.c:
295 $(AM_V_at)$(MKDIR_P) $(precomp)/math
296 $(AM_V_at)$(MAKE) genwheel$(EXEEXT)
297 $(AM_V_GEN)./genwheel -sCATACOMB_WHEEL_H \
298 -h$(precomp)/math/wheel.h -c$(precomp)/math/wheel.c \
299 -n5 -t"unsigned char" -iwheel
300endif
301
302###--------------------------------------------------------------------------
303### Binary polynomial arithmetic.
304
305## User-visible binary polynomial arithmetic.
306pkginclude_HEADERS += gf.h
307libmath_la_SOURCES += gf-arith.c
308TESTS += gf-arith.t$(EXEEXT)
309libmath_la_SOURCES += gf-exp.c gf-exp.h
310libmath_la_SOURCES += gf-gcd.c
311TESTS += gf-gcd.t$(EXEEXT)
312EXTRA_DIST += t/gf
313
314## Low-level binary polynomial arithmetic.
315pkginclude_HEADERS += gfx.h
316libmath_la_SOURCES += gfx.c
317TESTS += gfx.t$(EXEEXT)
318libmath_la_SOURCES += gfx-kmul.c
319TESTS += gfx-kmul.t$(EXEEXT)
320libmath_la_SOURCES += gfx-sqr.c
321nodist_libmath_la_SOURCES += ../precomp/math/gfx-sqrtab.c
322PRECOMPS += $(precomp)/math/gfx-sqrtab.c
323PRECOMP_PROGS += gfx-sqr-mktab
324if !CROSS_COMPILING
325$(precomp)/math/gfx-sqrtab.c:
326 $(AM_V_at)$(MKDIR_P) $(precomp)/math
327 $(AM_V_at)$(MAKE) gfx-sqr-mktab$(EXEEXT)
328 $(AM_V_GEN)./gfx-sqr-mktab >$(precomp)/math/gfx-sqrtab.c.new && \
329 mv $(precomp)/math/gfx-sqrtab.c.new \
330 $(precomp)/math/gfx-sqrtab.c
331endif
332TESTS += gfx-sqr.t$(EXEEXT)
333EXTRA_DIST += t/gfx
334
335## Conversions between normal and polynomial basis representations for binary
336## fields.
337pkginclude_HEADERS += gfn.h
338libmath_la_SOURCES += gfn.c
339TESTS += gfn.t$(EXEEXT)
340EXTRA_DIST += t/gfn
341
342## Efficient reduction modulo sparse polynomials.
343pkginclude_HEADERS += gfreduce.h
344libmath_la_SOURCES += gfreduce.c gfreduce-exp.h
345TESTS += gfreduce.t$(EXEEXT)
346EXTRA_DIST += t/gfreduce
347
348###--------------------------------------------------------------------------
349### Abstractions for various kinds of algebraic objects.
350
351## Abstract cyclic groups.
352pkginclude_HEADERS += group.h group-guts.h
353libmath_la_SOURCES += group-dstr.c
354libmath_la_SOURCES += group-exp.c group-exp.h
355libmath_la_SOURCES += group-file.c
356libmath_la_SOURCES += group-parse.c
357libmath_la_SOURCES += group-stdops.c
358libmath_la_SOURCES += group-string.c
359libmath_la_SOURCES += g-bin.c
360libmath_la_SOURCES += g-prime.c
361libmath_la_SOURCES += g-ec.c
362EXTRA_DIST += group-test.c
363TESTS += group-test.t$(EXEEXT)
364EXTRA_DIST += t/group
365
366## Abstract finite fields.
367pkginclude_HEADERS += field.h field-guts.h
368libmath_la_SOURCES += field.c
369libmath_la_SOURCES += field-exp.c field-exp.h
370libmath_la_SOURCES += field-parse.c
371libmath_la_SOURCES += f-binpoly.c
372libmath_la_SOURCES += f-niceprime.c
373libmath_la_SOURCES += f-prime.c
374
375## Table of built-in binary fields.
376pkginclude_HEADERS += bintab.h
377nodist_libmath_la_SOURCES += bintab.c
378CLEANFILES += bintab.c
379EXTRA_DIST += bintab.in
380bintab.c: $(mpgen) typeinfo.py bintab.in
381 $(MPGEN) bintab $(srcdir)/bintab.in >bintab.c.new && \
382 mv bintab.c.new bintab.c
383
384## Table of built-in prime fields.
385pkginclude_HEADERS += ptab.h
386nodist_libmath_la_SOURCES += ptab.c
387CLEANFILES += ptab.c
388EXTRA_DIST += ptab.in
389ptab.c: $(mpgen) typeinfo.py ptab.in
390 $(MPGEN) ptab $(srcdir)/ptab.in >ptab.c.new && \
391 mv ptab.c.new ptab.c
392
393###--------------------------------------------------------------------------
394### Elliptic curve arithmetic.
395
396## Basic elliptic curve arithmetic.
397pkginclude_HEADERS += ec.h ec-guts.h
398libmath_la_SOURCES += ec.c
399libmath_la_SOURCES += ec-exp.c ec-exp.h
400libmath_la_SOURCES += ec-info.c
401TESTS += ec-info.t$(EXEEXT)
402libmath_la_SOURCES += ec-bin.c
403TESTS += ec-bin.t$(EXEEXT)
404libmath_la_SOURCES += ec-prime.c
405TESTS += ec-prime.t$(EXEEXT)
406EXTRA_DIST += t/ec
407
408## The standard `raw' encoding (`EC2OSP') of elliptic curve points.
409pkginclude_HEADERS += ec-raw.h
410libmath_la_SOURCES += ec-raw.c
411
412## Assistance for elliptic-curve keys.
413pkginclude_HEADERS += ec-keys.h
414libmath_la_SOURCES += ec-fetch.c
415
416## Test infrastructure for elliptic curves.
417pkginclude_HEADERS += ec-test.h
418libmath_la_SOURCES += ec-test.c
419TESTS += ec-test.t$(EXEEXT)
420
421## Table of built-in elliptic-curve groups.
422pkginclude_HEADERS += ectab.h
423nodist_libmath_la_SOURCES += ectab.c
424CLEANFILES += ectab.c
425EXTRA_DIST += ectab.in
426ectab.c: $(mpgen) typeinfo.py ectab.in
427 $(MPGEN) ectab $(srcdir)/ectab.in >ectab.c.new && \
428 mv ectab.c.new ectab.c
429
430###--------------------------------------------------------------------------
431### Other strange things.
432
433pkginclude_HEADERS += qfarith.h
434
435pkginclude_HEADERS += f25519.h
436libmath_la_SOURCES += f25519.c
437TESTS += f25519.t$(EXEEXT)
438TESTS += f25519-p10.t$(EXEEXT)
439EXTRA_DIST += t/f25519
440
441check_PROGRAMS += f25519-p10.t
442f25519_p10_t_SOURCES = f25519.c
443f25519_p10_t_CPPFLAGS = $(AM_CPPFLAGS) -DTEST_RIG -DSRCDIR="\"$(srcdir)\""
444f25519_p10_t_CPPFLAGS += -DF25519_IMPL=10
445f25519_p10_t_LDFLAGS = $(TEST_LDFLAGS)
446f25519_p10_t_LDADD = $(TEST_LIBS) $(top_builddir)/libcatacomb.la
447f25519_p10_t_LDADD += $(mLib_LIBS) $(CATACOMB_LIBS) $(LIBS)
448
449pkginclude_HEADERS += fgoldi.h
450libmath_la_SOURCES += fgoldi.c
451TESTS += fgoldi.t$(EXEEXT)
452TESTS += fgoldi-p12.t$(EXEEXT)
453EXTRA_DIST += t/fgoldi
454
455check_PROGRAMS += fgoldi-p12.t
456fgoldi_p12_t_SOURCES = fgoldi.c
457fgoldi_p12_t_CPPFLAGS = $(AM_CPPFLAGS) -DTEST_RIG -DSRCDIR="\"$(srcdir)\""
458fgoldi_p12_t_CPPFLAGS += -DFGOLDI_IMPL=12
459fgoldi_p12_t_LDFLAGS = $(TEST_LDFLAGS)
460fgoldi_p12_t_LDADD = $(TEST_LIBS) $(top_builddir)/libcatacomb.la
461fgoldi_p12_t_LDADD += $(mLib_LIBS) $(CATACOMB_LIBS) $(LIBS)
462
463pkginclude_HEADERS += scaf.h
464libmath_la_SOURCES += scaf.c
465
466pkginclude_HEADERS += montladder.h
467pkginclude_HEADERS += scmul.h
468
469###----- That's all, folks --------------------------------------------------