Commit dd917944 authored by Matt Johnston's avatar Matt Johnston
Browse files

propagate of fc94c38452d9fd684a8e1eb9e3a73120aac0d38f and...

propagate of fc94c38452d9fd684a8e1eb9e3a73120aac0d38f and 3e4de4cbef3d9035a7b2f0c25e9f86e297f9f6d1 from branch 'au.asn.ucc.matt.ltm-orig' to 'au.asn.ucc.matt.ltm-db'

--HG--
branch : libtommath
extra : convert_revision : b676473ca40090e661bfd132e9a89a831b8b3740
parents fc43a488 216b5790
#Makefile for GCC
#
#Tom St Denis
VPATH=@[email protected]
srcdir=@[email protected]
# Dropbear takes flags from the toplevel makefile
CFLAGS += -I$(srcdir)
#CFLAGS += -I./ -Wall -W -Wshadow -Wsign-compare
#for speed
#CFLAGS += -O3 -funroll-loops
#for size
#CFLAGS += -Os
#x86 optimizations [should be valid for any GCC install though]
#CFLAGS += -fomit-frame-pointer
VERSION=0.30
default: libtommath.a
#default files to install
LIBNAME=libtommath.a
HEADERS=tommath.h
#LIBPATH-The directory for libtomcrypt to be installed to.
#INCPATH-The directory to install the header files for libtommath.
#DATAPATH-The directory to install the pdf docs.
DESTDIR=
LIBPATH=/usr/lib
INCPATH=/usr/include
DATAPATH=/usr/share/doc/libtommath/pdf
OBJECTS=bncore.o bn_mp_init.o bn_mp_clear.o bn_mp_exch.o bn_mp_grow.o bn_mp_shrink.o \
bn_mp_clamp.o bn_mp_zero.o bn_mp_set.o bn_mp_set_int.o bn_mp_init_size.o bn_mp_copy.o \
bn_mp_init_copy.o bn_mp_abs.o bn_mp_neg.o bn_mp_cmp_mag.o bn_mp_cmp.o bn_mp_cmp_d.o \
bn_mp_rshd.o bn_mp_lshd.o bn_mp_mod_2d.o bn_mp_div_2d.o bn_mp_mul_2d.o bn_mp_div_2.o \
bn_mp_mul_2.o bn_s_mp_add.o bn_s_mp_sub.o bn_fast_s_mp_mul_digs.o bn_s_mp_mul_digs.o \
bn_fast_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs.o bn_fast_s_mp_sqr.o bn_s_mp_sqr.o \
bn_mp_add.o bn_mp_sub.o bn_mp_karatsuba_mul.o bn_mp_mul.o bn_mp_karatsuba_sqr.o \
bn_mp_sqr.o bn_mp_div.o bn_mp_mod.o bn_mp_add_d.o bn_mp_sub_d.o bn_mp_mul_d.o \
bn_mp_div_d.o bn_mp_mod_d.o bn_mp_expt_d.o bn_mp_addmod.o bn_mp_submod.o \
bn_mp_mulmod.o bn_mp_sqrmod.o bn_mp_gcd.o bn_mp_lcm.o bn_fast_mp_invmod.o bn_mp_invmod.o \
bn_mp_reduce.o bn_mp_montgomery_setup.o bn_fast_mp_montgomery_reduce.o bn_mp_montgomery_reduce.o \
bn_mp_exptmod_fast.o bn_mp_exptmod.o bn_mp_2expt.o bn_mp_n_root.o bn_mp_jacobi.o bn_reverse.o \
bn_mp_count_bits.o bn_mp_read_unsigned_bin.o bn_mp_read_signed_bin.o bn_mp_to_unsigned_bin.o \
bn_mp_to_signed_bin.o bn_mp_unsigned_bin_size.o bn_mp_signed_bin_size.o \
bn_mp_xor.o bn_mp_and.o bn_mp_or.o bn_mp_rand.o bn_mp_montgomery_calc_normalization.o \
bn_mp_prime_is_divisible.o bn_prime_tab.o bn_mp_prime_fermat.o bn_mp_prime_miller_rabin.o \
bn_mp_prime_is_prime.o bn_mp_prime_next_prime.o bn_mp_dr_reduce.o \
bn_mp_dr_is_modulus.o bn_mp_dr_setup.o bn_mp_reduce_setup.o \
bn_mp_toom_mul.o bn_mp_toom_sqr.o bn_mp_div_3.o bn_s_mp_exptmod.o \
bn_mp_reduce_2k.o bn_mp_reduce_is_2k.o bn_mp_reduce_2k_setup.o \
bn_mp_radix_smap.o bn_mp_read_radix.o bn_mp_toradix.o bn_mp_radix_size.o \
bn_mp_fread.o bn_mp_fwrite.o bn_mp_cnt_lsb.o bn_error.o \
bn_mp_init_multi.o bn_mp_clear_multi.o bn_prime_sizes_tab.o bn_mp_exteuclid.o bn_mp_toradix_n.o \
bn_mp_prime_random_ex.o bn_mp_get_int.o bn_mp_sqrt.o bn_mp_is_square.o bn_mp_init_set.o \
bn_mp_init_set_int.o
libtommath.a: $(OBJECTS)
$(AR) $(ARFLAGS) libtommath.a $(OBJECTS)
$(RANLIB) libtommath.a
install: libtommath.a
install -d -g root -o root $(DESTDIR)$(LIBPATH)
install -d -g root -o root $(DESTDIR)$(INCPATH)
install -g root -o root $(LIBNAME) $(DESTDIR)$(LIBPATH)
install -g root -o root $(HEADERS) $(DESTDIR)$(INCPATH)
test: libtommath.a demo/demo.o
$(CC) demo/demo.o libtommath.a -o test
mtest: test
cd mtest ; $(CC) $(CFLAGS) mtest.c -o mtest -s
timing: libtommath.a
$(CC) $(CFLAGS) -DTIMER demo/demo.c libtommath.a -o ltmtest -s
# makes the LTM book DVI file, requires tetex, perl and makeindex [part of tetex I think]
docdvi: tommath.src
cd pics ; make
echo "hello" > tommath.ind
perl booker.pl
latex tommath > /dev/null
latex tommath > /dev/null
makeindex tommath
latex tommath > /dev/null
# poster, makes the single page PDF poster
poster: poster.tex
pdflatex poster
rm -f poster.aux poster.log
# makes the LTM book PDF file, requires tetex, cleans up the LaTeX temp files
docs: docdvi
dvipdf tommath
rm -f tommath.log tommath.aux tommath.dvi tommath.idx tommath.toc tommath.lof tommath.ind tommath.ilg
cd pics ; make clean
#LTM user manual
mandvi: bn.tex
echo "hello" > bn.ind
latex bn > /dev/null
latex bn > /dev/null
makeindex bn
latex bn > /dev/null
#LTM user manual [pdf]
manual: mandvi
pdflatex bn >/dev/null
rm -f bn.aux bn.dvi bn.log bn.idx bn.lof bn.out bn.toc
clean:
-rm -f *.bat *.pdf *.o *.a *.obj *.lib *.exe *.dll etclib/*.o demo/demo.o test ltmtest mpitest mtest/mtest mtest/mtest.exe \
*.idx *.toc *.log *.aux *.dvi *.lof *.ind *.ilg *.ps *.log *.s mpi.c
-cd etc && make clean
-cd pics && make clean
zipup: clean manual poster docs
perl gen.pl ; mv mpi.c pre_gen/ ; \
cd .. ; rm -rf ltm* libtommath-$(VERSION) ; mkdir libtommath-$(VERSION) ; \
cp -R ./libtommath/* ./libtommath-$(VERSION)/ ; \
tar -c libtommath-$(VERSION)/* | bzip2 -9vvc > ltm-$(VERSION).tar.bz2 ; \
zip -9 -r ltm-$(VERSION).zip libtommath-$(VERSION)/*
/* LibTomMath, multiple-precision integer library -- Tom St Denis
*
* LibTomMath is a library that provides multiple-precision
* integer arithmetic as well as number theoretic functionality.
*
* The library was designed directly after the MPI library by
* Michael Fromberger but has been written from scratch with
* additional optimizations in place.
*
* The library is free for all purposes without any express
* guarantee it works.
*
* Tom St Denis, [email protected], http://math.libtomcrypt.org
*/
#include <tommath.h>
/* this table gives the # of rabin miller trials for a prob of failure lower than 2^-96 */
static const struct {
int k, t;
} sizes[] = {
{ 128, 28 },
{ 256, 16 },
{ 384, 10 },
{ 512, 7 },
{ 640, 6 },
{ 768, 5 },
{ 896, 4 },
{ 1024, 4 },
{ 1152, 3 },
{ 1280, 3 },
{ 1408, 3 },
{ 1536, 3 },
{ 1664, 3 },
{ 1792, 2 } };
/* returns # of RM trials required for a given bit size */
int mp_prime_rabin_miller_trials(int size)
{
int x;
for (x = 0; x < (int)(sizeof(sizes)/(sizeof(sizes[0]))); x++) {
if (sizes[x].k == size) {
return sizes[x].t;
} else if (sizes[x].k > size) {
return (x == 0) ? sizes[0].t : sizes[x - 1].t;
}
}
return 1;
}
8, 39531752
9, 30698772
10, 28898844
11, 27048918
12, 25315654
13, 23599056
14, 21815794
15, 20232524
16, 18549258
17, 16949322
18, 15349386
19, 14949402
20, 14682746
21, 14599416
22, 14149434
23, 13899444
24, 13616122
25, 13266136
26, 12982814
27, 12666160
28, 12399504
29, 12199512
30, 11866192
31, 11566204
32, 11216218
33, 11066224
34, 10766236
35, 10582910
36, 10349586
37, 10282922
38, 10249590
39, 10199592
40, 10132928
41, 10132928
42, 10399584
43, 10049598
44, 10049598
45, 10049598
46, 9949602
47, 9882938
48, 9916270
49, 9849606
50, 9782942
51, 9749610
52, 9749610
53, 9832940
54, 9732944
55, 9749610
56, 9732944
57, 9632948
58, 9666280
59, 9666280
60, 9666280
61, 9582950
62, 9599616
63, 9532952
64, 9616282
65, 9499620
66, 9449622
67, 9516286
68, 9416290
69, 9466288
70, 9399624
71, 9416290
72, 9399624
73, 9416290
74, 9449622
75, 9416290
76, 9432956
77, 9416290
78, 9432956
79, 9416290
80, 9482954
81, 9432956
82, 9432956
83, 9449622
84, 9482954
85, 9449622
86, 9482954
87, 9466288
88, 9449622
89, 9482954
90, 9466288
91, 9516286
92, 9466288
93, 9516286
94, 9466288
95, 9516286
96, 9499620
97, 9532952
98, 9532952
99, 9516286
100, 9549618
101, 9566284
102, 9549618
103, 9582950
104, 9582950
105, 9632948
106, 9632948
107, 9716278
108, 9632948
109, 9649614
110, 9632948
111, 9682946
112, 9666280
113, 9732944
114, 9782942
115, 9682946
116, 9799608
117, 9949602
118, 9766276
119, 9766276
120, 9782942
121, 9816274
122, 9799608
123, 9849606
124, 9832940
125, 9932936
126, 9932936
127, 10066264
128, 9932936
129, 9966268
130, 10066264
131, 9999600
132, 10032932
133, 10049598
134, 10082930
135, 10116262
136, 10182926
137, 10166260
138, 10182926
139, 10199592
140, 10266256
141, 10282922
142, 10332920
143, 10349586
144, 10349586
145, 10399584
146, 10516246
147, 10399584
148, 10399584
149, 10416250
150, 10416250
151, 10449582
152, 10532912
153, 10466248
154, 10416250
155, 10432916
156, 10416250
157, 10532912
158, 10549578
159, 10466248
160, 10532912
161, 10516246
162, 10582910
163, 10516246
164, 10516246
165, 10582910
166, 10549578
167, 10599576
168, 10666240
169, 10632908
170, 10616242
171, 10649574
172, 10566244
173, 10682906
174, 10599576
175, 10616242
176, 10582910
177, 10649574
178, 10599576
179, 10616242
180, 10632908
181, 10666240
182, 10632908
183, 10699572
184, 10666240
185, 10716238
186, 10682906
187, 10682906
188, 10682906
189, 10699572
190, 10782902
191, 10816234
192, 10749570
193, 10732904
194, 10749570
195, 10749570
196, 10766236
197, 10782902
198, 10799568
199, 10782902
200, 10816234
8, 18446744069448082980
9, 26048958
10, 24415690
11, 22815754
12, 21349146
13, 19665880
14, 18032612
15, 16516006
16, 14882738
17, 13399464
18, 12116182
19, 11749530
20, 11532872
21, 11232884
22, 10999560
23, 10782902
24, 10666240
25, 10216258
26, 9916270
27, 9699612
28, 9399624
29, 9149634
30, 9032972
31, 8599656
32, 8349666
33, 8016346
34, 7716358
35, 7449702
36, 7166380
37, 7133048
38, 7083050
39, 7016386
40, 6949722
41, 6899724
42, 6933056
43, 6816394
44, 6816394
45, 6699732
46, 6849726
47, 7266376
48, 6799728
49, 6749730
50, 6683066
51, 6516406
52, 6483074
53, 6399744
54, 6416410
55, 6333080
56, 6266416
57, 6183086
58, 6283082
59, 6166420
60, 6266416
61, 6049758
62, 6049758
63, 5983094
64, 5949762
65, 5899764
66, 5866432
67, 5833100
68, 5816434
69, 5799768
70, 5783102
71, 5699772
72, 5716438
73, 5766436
74, 5699772
75, 5733104
76, 5683106
77, 5633108
78, 5666440
79, 5633108
80, 5649774
81, 5633108
82, 5666440
83, 5616442
84, 5699772
85, 5699772
86, 5983094
87, 5933096
88, 6099756
89, 5749770
90, 5799768
91, 5816434
92, 5883098
93, 5916430
94, 5849766
95, 5749770
96, 5916430
97, 5816434
98, 5749770
99, 5833100
100, 5866432
101, 6099756
102, 6016426
103, 5816434
104, 5616442
105, 5683106
106, 5733104
107, 5699772
108, 5766436
109, 5699772
110, 5666440
111, 5616442
112, 5683106
113, 5733104
114, 5766436
115, 5583110
116, 5566444
117, 5583110
118, 5649774
119, 5633108
120, 5683106
121, 5649774
122, 5649774
123, 5916430
124, 5766436
125, 5599776
126, 5616442
127, 5683106
128, 5599776
129, 5699772
130, 5716438
131, 5749770
132, 5799768
133, 5816434
134, 5866432
135, 5916430
136, 5983094
137, 6066424
138, 6066424
139, 6149754
140, 6249750
141, 6266416
142, 6533072
143, 6383078
144, 6316414
145, 6483074
146, 6449742
147, 6449742
148, 6466408
149, 6449742
150, 6483074
151, 6499740
152, 6499740
153, 6516406
154, 6499740
155, 6533072
156, 6549738
157, 6616402
158, 6566404
159, 6566404
160, 6566404
161, 6633068
162, 6599736
163, 6599736
164, 6583070
165, 6616402
166, 6616402
167, 6616402
168, 6649734
169, 6666400
170, 6666400
171, 6683066
172, 6666400
173, 6733064
174, 6783062
175, 6699732
176, 6783062
177, 6783062
178, 6783062
179, 6949722
180, 6949722
181, 6949722
182, 6933056
183, 6883058
184, 6799728
185, 7033052
186, 7083050
187, 6883058
188, 6916390
189, 6999720
190, 7016386
191, 6983054
192, 6933056
193, 7099716
194, 7099716
195, 7099716
196, 7083050
197, 7099716
198, 7066384
199, 7083050
200, 7099716
Karatsuba Multiplier Cutoff: 70
Karatsuba Squaring Cutoff: 116
static gcc3.2.1
8, 10763083022
9, 8731135392
10, 8283139944
11, 7867362475
12, 7444327653
13, 7080711166
14, 6720311143
15, 6174334366
16, 5758211592
17, 5310146691
18, 4934837262
19, 4845026643
20, 4808635899
21, 4705978642
22, 4637640999
23, 4562910250
24, 4498588248
25, 4431288135
26, 4365730339
27, 4304060185
28, 4245564825
29, 4158227082
30, 4084164405
31, 4013151778
32, 3948402079
33, 3873113901
34, 3819703326
35, 3758040019
36, 3713873303
37, 3682402795
38, 3675516805
39, 3665721067
40, 3653508535
41, 3644694256
42, 3634443778
43, 3622761784
44, 3617677891
45, 3601731232
46, 3594229129
47, 3584239999
48, 3578168863
49, 3568747707
50, 3563680942
51, 3552132837
52, 3546535036
53, 3537026053
54, 3532690062
55, 3530645935
56, 3517990435
57, 3511844931
58, 3524407951
59, 3503995587
60, 3498440712
61, 3490858969
62, 3485180392
63, 3488661349
64, 3479908069
65, 3705227131
66, 3469542342
67, 3466325719
68, 3465820384
69, 3461375398
70, 3460148488
71, 3455986714
72, 3452254999
73, 3450682381
74, 3462528321
75, 3453588556
76, 3454083670
77, 3457375651
78, 3459532852
79, 3457783105
80, 3457224032
81, 3456356743
82, 3457637218
83, 3455475598
84, 3457588015
85, 3458784793
86, 3463837992
87, 3461411719
88, 3461882104
89, 3462925813