trim trailing spaces/clean up
This commit is contained in:
parent
6fc385081e
commit
0213986c7b
2
.gitignore
vendored
2
.gitignore
vendored
@ -37,3 +37,5 @@ mtest.exe
|
||||
*.ilg
|
||||
*.ind
|
||||
*.pdf
|
||||
*.out
|
||||
tommath.tex
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
/* get the lower 32-bits of an mp_int */
|
||||
unsigned long mp_get_int(mp_int * a)
|
||||
unsigned long mp_get_int(mp_int * a)
|
||||
{
|
||||
int i;
|
||||
unsigned long res;
|
||||
@ -30,7 +30,7 @@ unsigned long mp_get_int(mp_int * a)
|
||||
|
||||
/* get most significant digit of result */
|
||||
res = DIGIT(a,i);
|
||||
|
||||
|
||||
while (--i >= 0) {
|
||||
res = (res << DIGIT_BIT) | DIGIT(a,i);
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtom.org
|
||||
*/
|
||||
|
||||
/* reduces x mod m, assumes 0 < x < m**2, mu is
|
||||
/* reduces x mod m, assumes 0 < x < m**2, mu is
|
||||
* precomputed via mp_reduce_setup.
|
||||
* From HAC pp.604 Algorithm 14.42
|
||||
*/
|
||||
@ -30,7 +30,7 @@ int mp_reduce (mp_int * x, mp_int * m, mp_int * mu)
|
||||
}
|
||||
|
||||
/* q1 = x / b**(k-1) */
|
||||
mp_rshd (&q, um - 1);
|
||||
mp_rshd (&q, um - 1);
|
||||
|
||||
/* according to HAC this optimization is ok */
|
||||
if (((unsigned long) um) > (((mp_digit)1) << (DIGIT_BIT - 1))) {
|
||||
@ -46,8 +46,8 @@ int mp_reduce (mp_int * x, mp_int * m, mp_int * mu)
|
||||
if ((res = fast_s_mp_mul_high_digs (&q, mu, &q, um)) != MP_OKAY) {
|
||||
goto CLEANUP;
|
||||
}
|
||||
#else
|
||||
{
|
||||
#else
|
||||
{
|
||||
res = MP_VAL;
|
||||
goto CLEANUP;
|
||||
}
|
||||
@ -55,7 +55,7 @@ int mp_reduce (mp_int * x, mp_int * m, mp_int * mu)
|
||||
}
|
||||
|
||||
/* q3 = q2 / b**(k+1) */
|
||||
mp_rshd (&q, um + 1);
|
||||
mp_rshd (&q, um + 1);
|
||||
|
||||
/* x = x mod b**(k+1), quick (no division) */
|
||||
if ((res = mp_mod_2d (x, DIGIT_BIT * (um + 1), x)) != MP_OKAY) {
|
||||
@ -87,7 +87,7 @@ int mp_reduce (mp_int * x, mp_int * m, mp_int * mu)
|
||||
goto CLEANUP;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CLEANUP:
|
||||
mp_clear (&q);
|
||||
|
||||
|
58
booker.pl
58
booker.pl
@ -15,7 +15,7 @@ if (shift =~ /PDF/) {
|
||||
$graph = "";
|
||||
} else {
|
||||
$graph = ".ps";
|
||||
}
|
||||
}
|
||||
|
||||
open(IN,"<tommath.src") or die "Can't open source file";
|
||||
open(OUT,">tommath.tex") or die "Can't open destination file";
|
||||
@ -26,7 +26,7 @@ $x = 0;
|
||||
while (<IN>) {
|
||||
print ".";
|
||||
if (!(++$x % 80)) { print "\n"; }
|
||||
#update the headings
|
||||
#update the headings
|
||||
if (~($_ =~ /\*/)) {
|
||||
if ($_ =~ /\\chapter{.+}/) {
|
||||
++$chapter;
|
||||
@ -37,7 +37,7 @@ while (<IN>) {
|
||||
} elsif ($_ =~ /\\subsection{.+}/) {
|
||||
++$subsection;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($_ =~ m/MARK/) {
|
||||
@m = split(",",$_);
|
||||
@ -56,7 +56,7 @@ $srcline = 0;
|
||||
while (<IN>) {
|
||||
++$readline;
|
||||
++$srcline;
|
||||
|
||||
|
||||
if ($_ =~ m/MARK/) {
|
||||
} elsif ($_ =~ m/EXAM/ || $_ =~ m/LIST/) {
|
||||
if ($_ =~ m/EXAM/) {
|
||||
@ -64,29 +64,29 @@ while (<IN>) {
|
||||
} else {
|
||||
$skipheader = 0;
|
||||
}
|
||||
|
||||
|
||||
# EXAM,file
|
||||
chomp($_);
|
||||
@m = split(",",$_);
|
||||
open(SRC,"<$m[1]") or die "Error:$srcline:Can't open source file $m[1]";
|
||||
|
||||
|
||||
print "$srcline:Inserting $m[1]:";
|
||||
|
||||
|
||||
$line = 0;
|
||||
$tmp = $m[1];
|
||||
$tmp =~ s/_/"\\_"/ge;
|
||||
print OUT "\\vspace{+3mm}\\begin{small}\n\\hspace{-5.1mm}{\\bf File}: $tmp\n\\vspace{-3mm}\n\\begin{alltt}\n";
|
||||
$wroteline += 5;
|
||||
|
||||
|
||||
if ($skipheader == 1) {
|
||||
# scan till next end of comment, e.g. skip license
|
||||
# scan till next end of comment, e.g. skip license
|
||||
while (<SRC>) {
|
||||
$text[$line++] = $_;
|
||||
last if ($_ =~ /math\.libtomcrypt\.com/);
|
||||
}
|
||||
<SRC>;
|
||||
<SRC>;
|
||||
}
|
||||
|
||||
|
||||
$inline = 0;
|
||||
while (<SRC>) {
|
||||
next if ($_ =~ /\$Source/);
|
||||
@ -100,11 +100,11 @@ while (<IN>) {
|
||||
$_ =~ s/}/"^}"/ge;
|
||||
$_ =~ s/\\/'\symbol{92}'/ge;
|
||||
$_ =~ s/\^/"\\"/ge;
|
||||
|
||||
|
||||
printf OUT ("%03d ", $line);
|
||||
for ($x = 0; $x < length($_); $x++) {
|
||||
print OUT chr(vec($_, $x, 8));
|
||||
if ($x == 75) {
|
||||
if ($x == 75) {
|
||||
print OUT "\n ";
|
||||
++$wroteline;
|
||||
}
|
||||
@ -123,9 +123,9 @@ while (<IN>) {
|
||||
$txt = $_;
|
||||
while ($txt =~ m/@\d+,.+@/) {
|
||||
@m = split("@",$txt); # splits into text, one, two
|
||||
@parms = split(",",$m[1]); # splits one,two into two elements
|
||||
|
||||
# now search from $parms[0] down for $parms[1]
|
||||
@parms = split(",",$m[1]); # splits one,two into two elements
|
||||
|
||||
# now search from $parms[0] down for $parms[1]
|
||||
$found1 = 0;
|
||||
$found2 = 0;
|
||||
for ($i = $parms[0]; $i < $totlines && $found1 == 0; $i++) {
|
||||
@ -134,7 +134,7 @@ while (<IN>) {
|
||||
$found1 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# now search backwards
|
||||
for ($i = $parms[0] - 1; $i >= 0 && $found2 == 0; $i--) {
|
||||
if ($text[$i] =~ m/\Q$parms[1]\E/) {
|
||||
@ -142,7 +142,7 @@ while (<IN>) {
|
||||
$found2 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# now use the closest match or the first if tied
|
||||
if ($found1 == 1 && $found2 == 0) {
|
||||
$found = 1;
|
||||
@ -160,8 +160,8 @@ while (<IN>) {
|
||||
} else {
|
||||
$found = 0;
|
||||
}
|
||||
|
||||
# if found replace
|
||||
|
||||
# if found replace
|
||||
if ($found == 1) {
|
||||
$delta = $parms[0] - $foundline;
|
||||
print "Found replacement tag for \"$parms[1]\" on line $srcline which refers to line $foundline (delta $delta)\n";
|
||||
@ -169,8 +169,8 @@ while (<IN>) {
|
||||
} else {
|
||||
print "ERROR: The tag \"$parms[1]\" on line $srcline was not found in the most recently parsed source!\n";
|
||||
}
|
||||
|
||||
# remake the rest of the line
|
||||
|
||||
# remake the rest of the line
|
||||
$cnt = @m;
|
||||
$txt = "";
|
||||
for ($i = 2; $i < $cnt; $i++) {
|
||||
@ -184,13 +184,13 @@ while (<IN>) {
|
||||
$txt = $_;
|
||||
while ($txt =~ /~.+~/) {
|
||||
@m = split("~", $txt);
|
||||
|
||||
|
||||
# word is the second position
|
||||
$word = @m[1];
|
||||
$a = $index1{$word};
|
||||
$b = $index2{$word};
|
||||
$c = $index3{$word};
|
||||
|
||||
|
||||
# if chapter (a) is zero it wasn't found
|
||||
if ($a == 0) {
|
||||
print "ERROR: the tag \"$word\" on line $srcline was not found previously marked.\n";
|
||||
@ -199,7 +199,7 @@ while (<IN>) {
|
||||
$str = $a;
|
||||
$str = $str . ".$b" if ($b != 0);
|
||||
$str = $str . ".$c" if ($c != 0);
|
||||
|
||||
|
||||
if ($b == 0 && $c == 0) {
|
||||
# its a chapter
|
||||
if ($a <= 10) {
|
||||
@ -228,16 +228,16 @@ while (<IN>) {
|
||||
$str = "chapter " . $str;
|
||||
}
|
||||
} else {
|
||||
$str = "section " . $str if ($b != 0 && $c == 0);
|
||||
$str = "section " . $str if ($b != 0 && $c == 0);
|
||||
$str = "sub-section " . $str if ($b != 0 && $c != 0);
|
||||
}
|
||||
|
||||
|
||||
#substitute
|
||||
$_ =~ s/~\Q$word\E~/$str/;
|
||||
|
||||
|
||||
print "Found replacement tag for marker \"$word\" on line $srcline which refers to $str\n";
|
||||
}
|
||||
|
||||
|
||||
# remake rest of the line
|
||||
$cnt = @m;
|
||||
$txt = "";
|
||||
|
10
etc/tune.c
10
etc/tune.c
@ -6,7 +6,7 @@
|
||||
#include <time.h>
|
||||
|
||||
/* how many times todo each size mult. Depends on your computer. For slow computers
|
||||
* this can be low like 5 or 10. For fast [re: Athlon] should be 25 - 50 or so
|
||||
* this can be low like 5 or 10. For fast [re: Athlon] should be 25 - 50 or so
|
||||
*/
|
||||
#define TIMES (1UL<<14UL)
|
||||
|
||||
@ -67,7 +67,7 @@ ulong64 time_mult(int size, int s)
|
||||
mp_rand (&a, size);
|
||||
mp_rand (&b, size);
|
||||
|
||||
if (s == 1) {
|
||||
if (s == 1) {
|
||||
KARATSUBA_MUL_CUTOFF = size;
|
||||
} else {
|
||||
KARATSUBA_MUL_CUTOFF = 100000;
|
||||
@ -95,7 +95,7 @@ ulong64 time_sqr(int size, int s)
|
||||
|
||||
mp_rand (&a, size);
|
||||
|
||||
if (s == 1) {
|
||||
if (s == 1) {
|
||||
KARATSUBA_SQR_CUTOFF = size;
|
||||
} else {
|
||||
KARATSUBA_SQR_CUTOFF = 100000;
|
||||
@ -117,7 +117,7 @@ main (void)
|
||||
ulong64 t1, t2;
|
||||
int x, y;
|
||||
|
||||
for (x = 8; ; x += 2) {
|
||||
for (x = 8; ; x += 2) {
|
||||
t1 = time_mult(x, 0);
|
||||
t2 = time_mult(x, 1);
|
||||
printf("%d: %9llu %9llu, %9llu\n", x, t1, t2, t2 - t1);
|
||||
@ -125,7 +125,7 @@ main (void)
|
||||
}
|
||||
y = x;
|
||||
|
||||
for (x = 8; ; x += 2) {
|
||||
for (x = 8; ; x += 2) {
|
||||
t1 = time_sqr(x, 0);
|
||||
t2 = time_sqr(x, 1);
|
||||
printf("%d: %9llu %9llu, %9llu\n", x, t1, t2, t2 - t1);
|
||||
|
26
makefile
26
makefile
@ -2,7 +2,7 @@
|
||||
#
|
||||
#Tom St Denis
|
||||
|
||||
#version of library
|
||||
#version of library
|
||||
VERSION=0.42.0
|
||||
|
||||
CFLAGS += -I./ -Wall -W -Wshadow -Wsign-compare
|
||||
@ -23,10 +23,10 @@ endif
|
||||
|
||||
ifndef IGNORE_SPEED
|
||||
|
||||
#for speed
|
||||
#for speed
|
||||
CFLAGS += -O3 -funroll-loops
|
||||
|
||||
#for size
|
||||
#for size
|
||||
#CFLAGS += -Os
|
||||
|
||||
#x86 optimizations [should be valid for any GCC install though]
|
||||
@ -104,7 +104,7 @@ $(LIBNAME): $(OBJECTS)
|
||||
#
|
||||
# This will build the library with profile generation
|
||||
# then run the test demo and rebuild the library.
|
||||
#
|
||||
#
|
||||
# So far I've seen improvements in the MP math
|
||||
profiled:
|
||||
make CFLAGS="$(CFLAGS) -fprofile-arcs -DTESTING" timing
|
||||
@ -112,7 +112,7 @@ profiled:
|
||||
rm -f *.a *.o ltmtest
|
||||
make CFLAGS="$(CFLAGS) -fbranch-probabilities"
|
||||
|
||||
#make a single object profiled library
|
||||
#make a single object profiled library
|
||||
profiled_single:
|
||||
perl gen.pl
|
||||
$(CC) $(CFLAGS) -fprofile-arcs -DTESTING -c mpi.c -o mpi.o
|
||||
@ -121,7 +121,7 @@ profiled_single:
|
||||
rm -f *.o ltmtest
|
||||
$(CC) $(CFLAGS) -fbranch-probabilities -DTESTING -c mpi.c -o mpi.o
|
||||
$(AR) $(ARFLAGS) $(LIBNAME) mpi.o
|
||||
ranlib $(LIBNAME)
|
||||
ranlib $(LIBNAME)
|
||||
|
||||
install: $(LIBNAME)
|
||||
install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH)
|
||||
@ -131,16 +131,16 @@ install: $(LIBNAME)
|
||||
|
||||
test: $(LIBNAME) demo/demo.o
|
||||
$(CC) $(CFLAGS) demo/demo.o $(LIBNAME) -o test
|
||||
|
||||
|
||||
mtest: test
|
||||
cd mtest ; $(CC) $(CFLAGS) mtest.c -o mtest
|
||||
|
||||
|
||||
timing: $(LIBNAME)
|
||||
$(CC) $(CFLAGS) -DTIMER demo/timing.c $(LIBNAME) -o ltmtest
|
||||
|
||||
# makes the LTM book DVI file, requires tetex, perl and makeindex [part of tetex I think]
|
||||
docdvi: tommath.src
|
||||
cd pics ; MAKE=${MAKE} ${MAKE}
|
||||
cd pics ; MAKE=${MAKE} ${MAKE}
|
||||
echo "hello" > tommath.ind
|
||||
perl booker.pl
|
||||
latex tommath > /dev/null
|
||||
@ -151,14 +151,14 @@ docdvi: tommath.src
|
||||
# poster, makes the single page PDF poster
|
||||
poster: poster.tex
|
||||
pdflatex poster
|
||||
rm -f poster.aux poster.log
|
||||
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=${MAKE} ${MAKE} clean
|
||||
|
||||
|
||||
#LTM user manual
|
||||
mandvi: bn.tex
|
||||
echo "hello" > bn.ind
|
||||
@ -172,7 +172,7 @@ manual: mandvi
|
||||
pdflatex bn >/dev/null
|
||||
rm -f bn.aux bn.dvi bn.log bn.idx bn.lof bn.out bn.toc
|
||||
|
||||
pretty:
|
||||
pretty:
|
||||
perl pretty.build
|
||||
|
||||
clean:
|
||||
@ -184,7 +184,7 @@ clean:
|
||||
|
||||
#zipup the project (take that!)
|
||||
no_oops: clean
|
||||
cd .. ; cvs commit
|
||||
cd .. ; cvs commit
|
||||
echo Scanning for scratch/dirty files
|
||||
find . -type f | grep -v CVS | xargs -n 1 bash mess.sh
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
CFLAGS += -I./ -Wall -W -Wshadow -O3 -funroll-loops -mno-cygwin
|
||||
|
||||
#x86 optimizations [should be valid for any GCC install though]
|
||||
CFLAGS += -fomit-frame-pointer
|
||||
CFLAGS += -fomit-frame-pointer
|
||||
|
||||
default: windll
|
||||
|
||||
|
14
makefile.icc
14
makefile.icc
@ -11,7 +11,7 @@ CFLAGS += -I./
|
||||
# -ax? specifies make code specifically for ? but compatible with IA-32
|
||||
# -x? specifies compile solely for ? [not specifically IA-32 compatible]
|
||||
#
|
||||
# where ? is
|
||||
# where ? is
|
||||
# K - PIII
|
||||
# W - first P4 [Williamette]
|
||||
# N - P4 Northwood
|
||||
@ -75,7 +75,7 @@ libtommath.a: $(OBJECTS)
|
||||
#
|
||||
# This will build the library with profile generation
|
||||
# then run the test demo and rebuild the library.
|
||||
#
|
||||
#
|
||||
# So far I've seen improvements in the MP math
|
||||
profiled:
|
||||
make -f makefile.icc CFLAGS="$(CFLAGS) -prof_gen -DTESTING" timing
|
||||
@ -83,7 +83,7 @@ profiled:
|
||||
rm -f *.a *.o ltmtest
|
||||
make -f makefile.icc CFLAGS="$(CFLAGS) -prof_use"
|
||||
|
||||
#make a single object profiled library
|
||||
#make a single object profiled library
|
||||
profiled_single:
|
||||
perl gen.pl
|
||||
$(CC) $(CFLAGS) -prof_gen -DTESTING -c mpi.c -o mpi.o
|
||||
@ -92,7 +92,7 @@ profiled_single:
|
||||
rm -f *.o ltmtest
|
||||
$(CC) $(CFLAGS) -prof_use -ip -DTESTING -c mpi.c -o mpi.o
|
||||
$(AR) $(ARFLAGS) libtommath.a mpi.o
|
||||
ranlib libtommath.a
|
||||
ranlib libtommath.a
|
||||
|
||||
install: libtommath.a
|
||||
install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH)
|
||||
@ -102,10 +102,10 @@ install: libtommath.a
|
||||
|
||||
test: libtommath.a demo/demo.o
|
||||
$(CC) demo/demo.o libtommath.a -o test
|
||||
|
||||
mtest: test
|
||||
|
||||
mtest: test
|
||||
cd mtest ; $(CC) $(CFLAGS) mtest.c -o mtest
|
||||
|
||||
|
||||
timing: libtommath.a
|
||||
$(CC) $(CFLAGS) -DTIMER demo/timing.c libtommath.a -o ltmtest
|
||||
|
||||
|
@ -98,7 +98,7 @@ install: $(LIBNAME)
|
||||
test: $(LIBNAME) demo/demo.o
|
||||
$(CC) $(CFLAGS) -c demo/demo.c -o demo/demo.o
|
||||
$(LT) --mode=link $(CC) $(LDFLAGS) -o test demo/demo.o $(LIBNAME_S)
|
||||
|
||||
|
||||
mtest: test
|
||||
cd mtest ; $(CC) $(CFLAGS) $(LDFLAGS) mtest.c -o mtest
|
||||
|
||||
|
139
tommath.out
139
tommath.out
@ -1,139 +0,0 @@
|
||||
\BOOKMARK [0][-]{chapter.1}{Introduction}{}
|
||||
\BOOKMARK [1][-]{section.1.1}{Multiple Precision Arithmetic}{chapter.1}
|
||||
\BOOKMARK [2][-]{subsection.1.1.1}{What is Multiple Precision Arithmetic?}{section.1.1}
|
||||
\BOOKMARK [2][-]{subsection.1.1.2}{The Need for Multiple Precision Arithmetic}{section.1.1}
|
||||
\BOOKMARK [2][-]{subsection.1.1.3}{Benefits of Multiple Precision Arithmetic}{section.1.1}
|
||||
\BOOKMARK [1][-]{section.1.2}{Purpose of This Text}{chapter.1}
|
||||
\BOOKMARK [1][-]{section.1.3}{Discussion and Notation}{chapter.1}
|
||||
\BOOKMARK [2][-]{subsection.1.3.1}{Notation}{section.1.3}
|
||||
\BOOKMARK [2][-]{subsection.1.3.2}{Precision Notation}{section.1.3}
|
||||
\BOOKMARK [2][-]{subsection.1.3.3}{Algorithm Inputs and Outputs}{section.1.3}
|
||||
\BOOKMARK [2][-]{subsection.1.3.4}{Mathematical Expressions}{section.1.3}
|
||||
\BOOKMARK [2][-]{subsection.1.3.5}{Work Effort}{section.1.3}
|
||||
\BOOKMARK [1][-]{section.1.4}{Exercises}{chapter.1}
|
||||
\BOOKMARK [1][-]{section.1.5}{Introduction to LibTomMath}{chapter.1}
|
||||
\BOOKMARK [2][-]{subsection.1.5.1}{What is LibTomMath?}{section.1.5}
|
||||
\BOOKMARK [2][-]{subsection.1.5.2}{Goals of LibTomMath}{section.1.5}
|
||||
\BOOKMARK [1][-]{section.1.6}{Choice of LibTomMath}{chapter.1}
|
||||
\BOOKMARK [2][-]{subsection.1.6.1}{Code Base}{section.1.6}
|
||||
\BOOKMARK [2][-]{subsection.1.6.2}{API Simplicity}{section.1.6}
|
||||
\BOOKMARK [2][-]{subsection.1.6.3}{Optimizations}{section.1.6}
|
||||
\BOOKMARK [2][-]{subsection.1.6.4}{Portability and Stability}{section.1.6}
|
||||
\BOOKMARK [2][-]{subsection.1.6.5}{Choice}{section.1.6}
|
||||
\BOOKMARK [0][-]{chapter.2}{Getting Started}{}
|
||||
\BOOKMARK [1][-]{section.2.1}{Library Basics}{chapter.2}
|
||||
\BOOKMARK [1][-]{section.2.2}{What is a Multiple Precision Integer?}{chapter.2}
|
||||
\BOOKMARK [2][-]{subsection.2.2.1}{The mp\137int Structure}{section.2.2}
|
||||
\BOOKMARK [1][-]{section.2.3}{Argument Passing}{chapter.2}
|
||||
\BOOKMARK [1][-]{section.2.4}{Return Values}{chapter.2}
|
||||
\BOOKMARK [1][-]{section.2.5}{Initialization and Clearing}{chapter.2}
|
||||
\BOOKMARK [2][-]{subsection.2.5.1}{Initializing an mp\137int}{section.2.5}
|
||||
\BOOKMARK [2][-]{subsection.2.5.2}{Clearing an mp\137int}{section.2.5}
|
||||
\BOOKMARK [1][-]{section.2.6}{Maintenance Algorithms}{chapter.2}
|
||||
\BOOKMARK [2][-]{subsection.2.6.1}{Augmenting an mp\137int's Precision}{section.2.6}
|
||||
\BOOKMARK [2][-]{subsection.2.6.2}{Initializing Variable Precision mp\137ints}{section.2.6}
|
||||
\BOOKMARK [2][-]{subsection.2.6.3}{Multiple Integer Initializations and Clearings}{section.2.6}
|
||||
\BOOKMARK [2][-]{subsection.2.6.4}{Clamping Excess Digits}{section.2.6}
|
||||
\BOOKMARK [0][-]{chapter.3}{Basic Operations}{}
|
||||
\BOOKMARK [1][-]{section.3.1}{Introduction}{chapter.3}
|
||||
\BOOKMARK [1][-]{section.3.2}{Assigning Values to mp\137int Structures}{chapter.3}
|
||||
\BOOKMARK [2][-]{subsection.3.2.1}{Copying an mp\137int}{section.3.2}
|
||||
\BOOKMARK [2][-]{subsection.3.2.2}{Creating a Clone}{section.3.2}
|
||||
\BOOKMARK [1][-]{section.3.3}{Zeroing an Integer}{chapter.3}
|
||||
\BOOKMARK [1][-]{section.3.4}{Sign Manipulation}{chapter.3}
|
||||
\BOOKMARK [2][-]{subsection.3.4.1}{Absolute Value}{section.3.4}
|
||||
\BOOKMARK [2][-]{subsection.3.4.2}{Integer Negation}{section.3.4}
|
||||
\BOOKMARK [1][-]{section.3.5}{Small Constants}{chapter.3}
|
||||
\BOOKMARK [2][-]{subsection.3.5.1}{Setting Small Constants}{section.3.5}
|
||||
\BOOKMARK [2][-]{subsection.3.5.2}{Setting Large Constants}{section.3.5}
|
||||
\BOOKMARK [1][-]{section.3.6}{Comparisons}{chapter.3}
|
||||
\BOOKMARK [2][-]{subsection.3.6.1}{Unsigned Comparisions}{section.3.6}
|
||||
\BOOKMARK [2][-]{subsection.3.6.2}{Signed Comparisons}{section.3.6}
|
||||
\BOOKMARK [0][-]{chapter.4}{Basic Arithmetic}{}
|
||||
\BOOKMARK [1][-]{section.4.1}{Introduction}{chapter.4}
|
||||
\BOOKMARK [1][-]{section.4.2}{Addition and Subtraction}{chapter.4}
|
||||
\BOOKMARK [2][-]{subsection.4.2.1}{Low Level Addition}{section.4.2}
|
||||
\BOOKMARK [2][-]{subsection.4.2.2}{Low Level Subtraction}{section.4.2}
|
||||
\BOOKMARK [2][-]{subsection.4.2.3}{High Level Addition}{section.4.2}
|
||||
\BOOKMARK [2][-]{subsection.4.2.4}{High Level Subtraction}{section.4.2}
|
||||
\BOOKMARK [1][-]{section.4.3}{Bit and Digit Shifting}{chapter.4}
|
||||
\BOOKMARK [2][-]{subsection.4.3.1}{Multiplication by Two}{section.4.3}
|
||||
\BOOKMARK [2][-]{subsection.4.3.2}{Division by Two}{section.4.3}
|
||||
\BOOKMARK [1][-]{section.4.4}{Polynomial Basis Operations}{chapter.4}
|
||||
\BOOKMARK [2][-]{subsection.4.4.1}{Multiplication by x}{section.4.4}
|
||||
\BOOKMARK [2][-]{subsection.4.4.2}{Division by x}{section.4.4}
|
||||
\BOOKMARK [1][-]{section.4.5}{Powers of Two}{chapter.4}
|
||||
\BOOKMARK [2][-]{subsection.4.5.1}{Multiplication by Power of Two}{section.4.5}
|
||||
\BOOKMARK [2][-]{subsection.4.5.2}{Division by Power of Two}{section.4.5}
|
||||
\BOOKMARK [2][-]{subsection.4.5.3}{Remainder of Division by Power of Two}{section.4.5}
|
||||
\BOOKMARK [0][-]{chapter.5}{Multiplication and Squaring}{}
|
||||
\BOOKMARK [1][-]{section.5.1}{The Multipliers}{chapter.5}
|
||||
\BOOKMARK [1][-]{section.5.2}{Multiplication}{chapter.5}
|
||||
\BOOKMARK [2][-]{subsection.5.2.1}{The Baseline Multiplication}{section.5.2}
|
||||
\BOOKMARK [2][-]{subsection.5.2.2}{Faster Multiplication by the ``Comba'' Method}{section.5.2}
|
||||
\BOOKMARK [2][-]{subsection.5.2.3}{Polynomial Basis Multiplication}{section.5.2}
|
||||
\BOOKMARK [2][-]{subsection.5.2.4}{Karatsuba Multiplication}{section.5.2}
|
||||
\BOOKMARK [2][-]{subsection.5.2.5}{Toom-Cook 3-Way Multiplication}{section.5.2}
|
||||
\BOOKMARK [2][-]{subsection.5.2.6}{Signed Multiplication}{section.5.2}
|
||||
\BOOKMARK [1][-]{section.5.3}{Squaring}{chapter.5}
|
||||
\BOOKMARK [2][-]{subsection.5.3.1}{The Baseline Squaring Algorithm}{section.5.3}
|
||||
\BOOKMARK [2][-]{subsection.5.3.2}{Faster Squaring by the ``Comba'' Method}{section.5.3}
|
||||
\BOOKMARK [2][-]{subsection.5.3.3}{Polynomial Basis Squaring}{section.5.3}
|
||||
\BOOKMARK [2][-]{subsection.5.3.4}{Karatsuba Squaring}{section.5.3}
|
||||
\BOOKMARK [2][-]{subsection.5.3.5}{Toom-Cook Squaring}{section.5.3}
|
||||
\BOOKMARK [2][-]{subsection.5.3.6}{High Level Squaring}{section.5.3}
|
||||
\BOOKMARK [0][-]{chapter.6}{Modular Reduction}{}
|
||||
\BOOKMARK [1][-]{section.6.1}{Basics of Modular Reduction}{chapter.6}
|
||||
\BOOKMARK [1][-]{section.6.2}{The Barrett Reduction}{chapter.6}
|
||||
\BOOKMARK [2][-]{subsection.6.2.1}{Fixed Point Arithmetic}{section.6.2}
|
||||
\BOOKMARK [2][-]{subsection.6.2.2}{Choosing a Radix Point}{section.6.2}
|
||||
\BOOKMARK [2][-]{subsection.6.2.3}{Trimming the Quotient}{section.6.2}
|
||||
\BOOKMARK [2][-]{subsection.6.2.4}{Trimming the Residue}{section.6.2}
|
||||
\BOOKMARK [2][-]{subsection.6.2.5}{The Barrett Algorithm}{section.6.2}
|
||||
\BOOKMARK [2][-]{subsection.6.2.6}{The Barrett Setup Algorithm}{section.6.2}
|
||||
\BOOKMARK [1][-]{section.6.3}{The Montgomery Reduction}{chapter.6}
|
||||
\BOOKMARK [2][-]{subsection.6.3.1}{Digit Based Montgomery Reduction}{section.6.3}
|
||||
\BOOKMARK [2][-]{subsection.6.3.2}{Baseline Montgomery Reduction}{section.6.3}
|
||||
\BOOKMARK [2][-]{subsection.6.3.3}{Faster ``Comba'' Montgomery Reduction}{section.6.3}
|
||||
\BOOKMARK [2][-]{subsection.6.3.4}{Montgomery Setup}{section.6.3}
|
||||
\BOOKMARK [1][-]{section.6.4}{The Diminished Radix Algorithm}{chapter.6}
|
||||
\BOOKMARK [2][-]{subsection.6.4.1}{Choice of Moduli}{section.6.4}
|
||||
\BOOKMARK [2][-]{subsection.6.4.2}{Choice of k}{section.6.4}
|
||||
\BOOKMARK [2][-]{subsection.6.4.3}{Restricted Diminished Radix Reduction}{section.6.4}
|
||||
\BOOKMARK [2][-]{subsection.6.4.4}{Unrestricted Diminished Radix Reduction}{section.6.4}
|
||||
\BOOKMARK [1][-]{section.6.5}{Algorithm Comparison}{chapter.6}
|
||||
\BOOKMARK [0][-]{chapter.7}{Exponentiation}{}
|
||||
\BOOKMARK [1][-]{section.7.1}{Exponentiation Basics}{chapter.7}
|
||||
\BOOKMARK [2][-]{subsection.7.1.1}{Single Digit Exponentiation}{section.7.1}
|
||||
\BOOKMARK [1][-]{section.7.2}{k-ary Exponentiation}{chapter.7}
|
||||
\BOOKMARK [2][-]{subsection.7.2.1}{Optimal Values of k}{section.7.2}
|
||||
\BOOKMARK [2][-]{subsection.7.2.2}{Sliding-Window Exponentiation}{section.7.2}
|
||||
\BOOKMARK [1][-]{section.7.3}{Modular Exponentiation}{chapter.7}
|
||||
\BOOKMARK [2][-]{subsection.7.3.1}{Barrett Modular Exponentiation}{section.7.3}
|
||||
\BOOKMARK [1][-]{section.7.4}{Quick Power of Two}{chapter.7}
|
||||
\BOOKMARK [0][-]{chapter.8}{Higher Level Algorithms}{}
|
||||
\BOOKMARK [1][-]{section.8.1}{Integer Division with Remainder}{chapter.8}
|
||||
\BOOKMARK [2][-]{subsection.8.1.1}{Quotient Estimation}{section.8.1}
|
||||
\BOOKMARK [2][-]{subsection.8.1.2}{Normalized Integers}{section.8.1}
|
||||
\BOOKMARK [2][-]{subsection.8.1.3}{Radix- Division with Remainder}{section.8.1}
|
||||
\BOOKMARK [1][-]{section.8.2}{Single Digit Helpers}{chapter.8}
|
||||
\BOOKMARK [2][-]{subsection.8.2.1}{Single Digit Addition and Subtraction}{section.8.2}
|
||||
\BOOKMARK [2][-]{subsection.8.2.2}{Single Digit Multiplication}{section.8.2}
|
||||
\BOOKMARK [2][-]{subsection.8.2.3}{Single Digit Division}{section.8.2}
|
||||
\BOOKMARK [2][-]{subsection.8.2.4}{Single Digit Root Extraction}{section.8.2}
|
||||
\BOOKMARK [1][-]{section.8.3}{Random Number Generation}{chapter.8}
|
||||
\BOOKMARK [1][-]{section.8.4}{Formatted Representations}{chapter.8}
|
||||
\BOOKMARK [2][-]{subsection.8.4.1}{Reading Radix-n Input}{section.8.4}
|
||||
\BOOKMARK [2][-]{subsection.8.4.2}{Generating Radix-n Output}{section.8.4}
|
||||
\BOOKMARK [0][-]{chapter.9}{Number Theoretic Algorithms}{}
|
||||
\BOOKMARK [1][-]{section.9.1}{Greatest Common Divisor}{chapter.9}
|
||||
\BOOKMARK [2][-]{subsection.9.1.1}{Complete Greatest Common Divisor}{section.9.1}
|
||||
\BOOKMARK [1][-]{section.9.2}{Least Common Multiple}{chapter.9}
|
||||
\BOOKMARK [1][-]{section.9.3}{Jacobi Symbol Computation}{chapter.9}
|
||||
\BOOKMARK [2][-]{subsection.9.3.1}{Jacobi Symbol}{section.9.3}
|
||||
\BOOKMARK [1][-]{section.9.4}{Modular Inverse}{chapter.9}
|
||||
\BOOKMARK [2][-]{subsection.9.4.1}{General Case}{section.9.4}
|
||||
\BOOKMARK [1][-]{section.9.5}{Primality Tests}{chapter.9}
|
||||
\BOOKMARK [2][-]{subsection.9.5.1}{Trial Division}{section.9.5}
|
||||
\BOOKMARK [2][-]{subsection.9.5.2}{The Fermat Test}{section.9.5}
|
||||
\BOOKMARK [2][-]{subsection.9.5.3}{The Miller-Rabin Test}{section.9.5}
|
2130
tommath.src
2130
tommath.src
File diff suppressed because it is too large
Load Diff
6691
tommath.tex
6691
tommath.tex
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user