added libtommath-0.20
This commit is contained in:
parent
ef490f30f6
commit
0fe7a2d4ff
2
bn.tex
2
bn.tex
@ -1,7 +1,7 @@
|
|||||||
\documentclass[]{article}
|
\documentclass[]{article}
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\title{LibTomMath v0.19 \\ A Free Multiple Precision Integer Library \\ http://math.libtomcrypt.org }
|
\title{LibTomMath v0.20 \\ A Free Multiple Precision Integer Library \\ http://math.libtomcrypt.org }
|
||||||
\author{Tom St Denis \\ tomstdenis@iahu.ca}
|
\author{Tom St Denis \\ tomstdenis@iahu.ca}
|
||||||
\maketitle
|
\maketitle
|
||||||
\newpage
|
\newpage
|
||||||
|
@ -80,7 +80,6 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode)
|
|||||||
if (((P->used * 2 + 1) < MP_WARRAY) &&
|
if (((P->used * 2 + 1) < MP_WARRAY) &&
|
||||||
P->used < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) {
|
P->used < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) {
|
||||||
redux = fast_mp_montgomery_reduce;
|
redux = fast_mp_montgomery_reduce;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* use slower baselien method */
|
/* use slower baselien method */
|
||||||
redux = mp_montgomery_reduce;
|
redux = mp_montgomery_reduce;
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
June 8th, 2003
|
||||||
|
v0.20 -- Removed the book from the package. Added the TDCAL license document.
|
||||||
|
-- This release is officially pure-bred TDCAL again [last officially TDCAL based release was v0.16]
|
||||||
|
|
||||||
June 6th, 2003
|
June 6th, 2003
|
||||||
v0.19 -- Fixed a bug in mp_montgomery_reduce() which was introduced when I tweaked mp_rshd() in the previous release.
|
v0.19 -- Fixed a bug in mp_montgomery_reduce() which was introduced when I tweaked mp_rshd() in the previous release.
|
||||||
Essentially the digits were not trimmed before the compare which cause a subtraction to occur all the time.
|
Essentially the digits were not trimmed before the compare which cause a subtraction to occur all the time.
|
||||||
|
@ -1,2 +1 @@
|
|||||||
256-bits (k = 36113) = 115792089237316195423570985008687907853269984665640564039457584007913129603823
|
259-bits (k = 17745) = 926336713898529563388567880069503262826159877325124512315660672063305037101743
|
||||||
512-bits (k = 38117) = 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006045979
|
|
||||||
|
@ -7,7 +7,7 @@ int sizes[] = {256, 512, 768, 1024, 1536, 2048, 3072, 4096};
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
char buf[2000];
|
char buf[2000];
|
||||||
int x, y, t;
|
int x, y;
|
||||||
mp_int q, p;
|
mp_int q, p;
|
||||||
FILE *out;
|
FILE *out;
|
||||||
clock_t t1;
|
clock_t t1;
|
||||||
|
5
makefile
5
makefile
@ -1,6 +1,6 @@
|
|||||||
CFLAGS += -I./ -Wall -W -Wshadow -O3 -fomit-frame-pointer -funroll-loops
|
CFLAGS += -I./ -Wall -W -Wshadow -O3 -fomit-frame-pointer -funroll-loops
|
||||||
|
|
||||||
VERSION=0.19
|
VERSION=0.20
|
||||||
|
|
||||||
default: libtommath.a
|
default: libtommath.a
|
||||||
|
|
||||||
@ -103,5 +103,6 @@ clean:
|
|||||||
zipup: clean manual poster
|
zipup: clean manual poster
|
||||||
perl gen.pl ; mv mpi.c pre_gen/ ; \
|
perl gen.pl ; mv mpi.c pre_gen/ ; \
|
||||||
cd .. ; rm -rf ltm* libtommath-$(VERSION) ; mkdir libtommath-$(VERSION) ; \
|
cd .. ; rm -rf ltm* libtommath-$(VERSION) ; mkdir libtommath-$(VERSION) ; \
|
||||||
cp -R ./libtommath/* ./libtommath-$(VERSION)/ ; tar -c libtommath-$(VERSION)/* > ltm-$(VERSION).tar ; \
|
cp -R ./libtommath/* ./libtommath-$(VERSION)/ ; cp tdcal.pdf ./libtommath-$(VERSION)/ ; cd ./libtommath-$(VERSION) ; rm -f tommath.src tommath.tex tommath.out ; cd pics ; rm -f * ; cd .. ; cd .. ; ls ; \
|
||||||
|
tar -c libtommath-$(VERSION)/* > ltm-$(VERSION).tar ; \
|
||||||
bzip2 -9vv ltm-$(VERSION).tar ; zip -9 -r ltm-$(VERSION).zip libtommath-$(VERSION)/*
|
bzip2 -9vv ltm-$(VERSION).tar ; zip -9 -r ltm-$(VERSION).zip libtommath-$(VERSION)/*
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -1,23 +0,0 @@
|
|||||||
# makes the images... yeah
|
|
||||||
|
|
||||||
default: pses
|
|
||||||
|
|
||||||
|
|
||||||
sliding_window.ps: sliding_window.tif
|
|
||||||
tiff2ps -c -e sliding_window.tif > sliding_window.ps
|
|
||||||
|
|
||||||
expt_state.ps: expt_state.tif
|
|
||||||
tiff2ps -c -e expt_state.tif > expt_state.ps
|
|
||||||
|
|
||||||
sliding_window.pdf: sliding_window.ps
|
|
||||||
epstopdf sliding_window.ps
|
|
||||||
|
|
||||||
expt_state.pdf: expt_state.ps
|
|
||||||
epstopdf expt_state.ps
|
|
||||||
|
|
||||||
pses: sliding_window.ps expt_state.ps
|
|
||||||
pdfes: sliding_window.pdf expt_state.pdf
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf *.ps *.pdf .xvpics
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
BIN
poster.pdf
BIN
poster.pdf
Binary file not shown.
@ -2155,7 +2155,6 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode)
|
|||||||
if (((P->used * 2 + 1) < MP_WARRAY) &&
|
if (((P->used * 2 + 1) < MP_WARRAY) &&
|
||||||
P->used < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) {
|
P->used < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) {
|
||||||
redux = fast_mp_montgomery_reduce;
|
redux = fast_mp_montgomery_reduce;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* use slower baselien method */
|
/* use slower baselien method */
|
||||||
redux = mp_montgomery_reduce;
|
redux = mp_montgomery_reduce;
|
||||||
|
143
tommath.out
143
tommath.out
@ -1,143 +0,0 @@
|
|||||||
\BOOKMARK [0][-]{chapter.1}{Introduction}{}
|
|
||||||
\BOOKMARK [1][-]{section.1.1}{Multiple Precision Arithmetic}{chapter.1}
|
|
||||||
\BOOKMARK [2][-]{subsection.1.1.1}{The Need for Multiple Precision Arithmetic}{section.1.1}
|
|
||||||
\BOOKMARK [2][-]{subsection.1.1.2}{Multiple Precision Arithmetic}{section.1.1}
|
|
||||||
\BOOKMARK [2][-]{subsection.1.1.3}{Benefits of Multiple Precision Arithmetic}{section.1.1}
|
|
||||||
\BOOKMARK [2][-]{subsection.1.1.4}{Basis of Operations}{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}{Work Effort}{section.1.3}
|
|
||||||
\BOOKMARK [1][-]{section.1.4}{Exercises}{chapter.1}
|
|
||||||
\BOOKMARK [0][-]{chapter.2}{Introduction to LibTomMath}{}
|
|
||||||
\BOOKMARK [1][-]{section.2.1}{What is LibTomMath?}{chapter.2}
|
|
||||||
\BOOKMARK [1][-]{section.2.2}{Goals of LibTomMath}{chapter.2}
|
|
||||||
\BOOKMARK [1][-]{section.2.3}{Choice of LibTomMath}{chapter.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.2.3.1}{Code Base}{section.2.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.2.3.2}{API Simplicity}{section.2.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.2.3.3}{Optimizations}{section.2.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.2.3.4}{Portability and Stability}{section.2.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.2.3.5}{Choice}{section.2.3}
|
|
||||||
\BOOKMARK [0][-]{chapter.3}{Getting Started}{}
|
|
||||||
\BOOKMARK [1][-]{section.3.1}{Library Basics}{chapter.3}
|
|
||||||
\BOOKMARK [1][-]{section.3.2}{What is a Multiple Precision Integer?}{chapter.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.3.2.1}{The mp\137int structure}{section.3.2}
|
|
||||||
\BOOKMARK [1][-]{section.3.3}{Argument Passing}{chapter.3}
|
|
||||||
\BOOKMARK [1][-]{section.3.4}{Return Values}{chapter.3}
|
|
||||||
\BOOKMARK [1][-]{section.3.5}{Initialization and Clearing}{chapter.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.3.5.1}{Initializing an mp\137int}{section.3.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.3.5.2}{Clearing an mp\137int}{section.3.5}
|
|
||||||
\BOOKMARK [1][-]{section.3.6}{Other Initialization Routines}{chapter.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.3.6.1}{Initializing Variable Sized mp\137int Structures}{section.3.6}
|
|
||||||
\BOOKMARK [2][-]{subsection.3.6.2}{Creating a Clone}{section.3.6}
|
|
||||||
\BOOKMARK [2][-]{subsection.3.6.3}{Multiple Integer Initializations And Clearings}{section.3.6}
|
|
||||||
\BOOKMARK [1][-]{section.3.7}{Maintenance}{chapter.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.3.7.1}{Augmenting Integer Precision}{section.3.7}
|
|
||||||
\BOOKMARK [2][-]{subsection.3.7.2}{Clamping Excess Digits}{section.3.7}
|
|
||||||
\BOOKMARK [0][-]{chapter.4}{Basic Operations}{}
|
|
||||||
\BOOKMARK [1][-]{section.4.1}{Copying an Integer}{chapter.4}
|
|
||||||
\BOOKMARK [1][-]{section.4.2}{Zeroing an Integer}{chapter.4}
|
|
||||||
\BOOKMARK [1][-]{section.4.3}{Sign Manipulation}{chapter.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.4.3.1}{Absolute Value}{section.4.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.4.3.2}{Integer Negation}{section.4.3}
|
|
||||||
\BOOKMARK [1][-]{section.4.4}{Small Constants}{chapter.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.4.4.1}{Setting Small Constants}{section.4.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.4.4.2}{Setting Large Constants}{section.4.4}
|
|
||||||
\BOOKMARK [1][-]{section.4.5}{Comparisons}{chapter.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.4.5.1}{Unsigned Comparisions}{section.4.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.4.5.2}{Signed Comparisons}{section.4.5}
|
|
||||||
\BOOKMARK [0][-]{chapter.5}{Basic Arithmetic}{}
|
|
||||||
\BOOKMARK [1][-]{section.5.1}{Building Blocks}{chapter.5}
|
|
||||||
\BOOKMARK [1][-]{section.5.2}{Addition and Subtraction}{chapter.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.2.1}{Low Level Addition}{section.5.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.2.2}{Low Level Subtraction}{section.5.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.2.3}{High Level Addition}{section.5.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.2.4}{High Level Subtraction}{section.5.2}
|
|
||||||
\BOOKMARK [1][-]{section.5.3}{Bit and Digit Shifting}{chapter.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.3.1}{Multiplication by Two}{section.5.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.3.2}{Division by Two}{section.5.3}
|
|
||||||
\BOOKMARK [1][-]{section.5.4}{Polynomial Basis Operations}{chapter.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.4.1}{Multiplication by x}{section.5.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.4.2}{Division by x}{section.5.4}
|
|
||||||
\BOOKMARK [1][-]{section.5.5}{Powers of Two}{chapter.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.5.1}{Multiplication by Power of Two}{section.5.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.5.2}{Division by Power of Two}{section.5.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.5.5.3}{Remainder of Division by Power of Two}{section.5.5}
|
|
||||||
\BOOKMARK [0][-]{chapter.6}{Multiplication and Squaring}{}
|
|
||||||
\BOOKMARK [1][-]{section.6.1}{The Multipliers}{chapter.6}
|
|
||||||
\BOOKMARK [1][-]{section.6.2}{Multiplication}{chapter.6}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.2.1}{The Baseline Multiplication}{section.6.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.2.2}{Faster Multiplication by the ``Comba'' Method}{section.6.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.2.3}{Polynomial Basis Multiplication}{section.6.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.2.4}{Karatsuba Multiplication}{section.6.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.2.5}{Toom-Cook 3-Way Multiplication}{section.6.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.2.6}{Signed Multiplication}{section.6.2}
|
|
||||||
\BOOKMARK [1][-]{section.6.3}{Squaring}{chapter.6}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.3.1}{The Baseline Squaring Algorithm}{section.6.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.3.2}{Faster Squaring by the ``Comba'' Method}{section.6.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.3.3}{Polynomial Basis Squaring}{section.6.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.3.4}{Karatsuba Squaring}{section.6.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.3.5}{Toom-Cook Squaring}{section.6.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.6.3.6}{High Level Squaring}{section.6.3}
|
|
||||||
\BOOKMARK [0][-]{chapter.7}{Modular Reduction}{}
|
|
||||||
\BOOKMARK [1][-]{section.7.1}{Basics of Modular Reduction}{chapter.7}
|
|
||||||
\BOOKMARK [1][-]{section.7.2}{The Barrett Reduction}{chapter.7}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.2.1}{Fixed Point Arithmetic}{section.7.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.2.2}{Choosing a Radix Point}{section.7.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.2.3}{Trimming the Quotient}{section.7.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.2.4}{Trimming the Residue}{section.7.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.2.5}{The Barrett Algorithm}{section.7.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.2.6}{The Barrett Setup Algorithm}{section.7.2}
|
|
||||||
\BOOKMARK [1][-]{section.7.3}{The Montgomery Reduction}{chapter.7}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.3.1}{Digit Based Montgomery Reduction}{section.7.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.3.2}{Baseline Montgomery Reduction}{section.7.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.3.3}{Faster ``Comba'' Montgomery Reduction}{section.7.3}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.3.4}{Montgomery Setup}{section.7.3}
|
|
||||||
\BOOKMARK [1][-]{section.7.4}{The Diminished Radix Algorithm}{chapter.7}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.4.1}{Choice of Moduli}{section.7.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.4.2}{Choice of k}{section.7.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.4.3}{Restricted Diminished Radix Reduction}{section.7.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.7.4.4}{Unrestricted Diminished Radix Reduction}{section.7.4}
|
|
||||||
\BOOKMARK [1][-]{section.7.5}{Algorithm Comparison}{chapter.7}
|
|
||||||
\BOOKMARK [0][-]{chapter.8}{Exponentiation}{}
|
|
||||||
\BOOKMARK [1][-]{section.8.1}{Exponentiation Basics}{chapter.8}
|
|
||||||
\BOOKMARK [2][-]{subsection.8.1.1}{Single Digit Exponentiation}{section.8.1}
|
|
||||||
\BOOKMARK [1][-]{section.8.2}{k-ary Exponentiation}{chapter.8}
|
|
||||||
\BOOKMARK [2][-]{subsection.8.2.1}{Optimal Values of k}{section.8.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.8.2.2}{Sliding-Window Exponentiation}{section.8.2}
|
|
||||||
\BOOKMARK [1][-]{section.8.3}{Modular Exponentiation}{chapter.8}
|
|
||||||
\BOOKMARK [2][-]{subsection.8.3.1}{Barrett Modular Exponentiation}{section.8.3}
|
|
||||||
\BOOKMARK [1][-]{section.8.4}{Quick Power of Two}{chapter.8}
|
|
||||||
\BOOKMARK [0][-]{chapter.9}{Higher Level Algorithms}{}
|
|
||||||
\BOOKMARK [1][-]{section.9.1}{Integer Division with Remainder}{chapter.9}
|
|
||||||
\BOOKMARK [1][-]{section.9.2}{Single Digit Helpers}{chapter.9}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.2.1}{Single Digit Addition}{section.9.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.2.2}{Single Digit Subtraction}{section.9.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.2.3}{Single Digit Multiplication}{section.9.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.2.4}{Single Digit Division}{section.9.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.2.5}{Single Digit Modulo}{section.9.2}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.2.6}{Single Digit Root Extraction}{section.9.2}
|
|
||||||
\BOOKMARK [1][-]{section.9.3}{Random Number Generation}{chapter.9}
|
|
||||||
\BOOKMARK [1][-]{section.9.4}{Formatted Output}{chapter.9}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.4.1}{Getting The Output Size}{section.9.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.4.2}{Generating Radix-n Output}{section.9.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.4.3}{Reading Radix-n Input}{section.9.4}
|
|
||||||
\BOOKMARK [1][-]{section.9.5}{Unformatted Output}{chapter.9}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.5.1}{Getting The Output Size}{section.9.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.5.2}{Generating Output}{section.9.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.9.5.3}{Reading Input}{section.9.5}
|
|
||||||
\BOOKMARK [0][-]{chapter.10}{Number Theoretic Algorithms}{}
|
|
||||||
\BOOKMARK [1][-]{section.10.1}{Greatest Common Divisor}{chapter.10}
|
|
||||||
\BOOKMARK [1][-]{section.10.2}{Least Common Multiple}{chapter.10}
|
|
||||||
\BOOKMARK [1][-]{section.10.3}{Jacobi Symbol Computation}{chapter.10}
|
|
||||||
\BOOKMARK [1][-]{section.10.4}{Modular Inverse}{chapter.10}
|
|
||||||
\BOOKMARK [2][-]{subsection.10.4.1}{General Case}{section.10.4}
|
|
||||||
\BOOKMARK [2][-]{subsection.10.4.2}{Odd Moduli}{section.10.4}
|
|
||||||
\BOOKMARK [1][-]{section.10.5}{Primality Tests}{chapter.10}
|
|
||||||
\BOOKMARK [2][-]{subsection.10.5.1}{Trial Division}{section.10.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.10.5.2}{The Fermat Test}{section.10.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.10.5.3}{The Miller-Rabin Test}{section.10.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.10.5.4}{Primality Test in a Bottle}{section.10.5}
|
|
||||||
\BOOKMARK [2][-]{subsection.10.5.5}{The Next Prime}{section.10.5}
|
|
||||||
\BOOKMARK [1][-]{section.10.6}{Root Extraction}{chapter.10}
|
|
||||||
\BOOKMARK [0][-]{appendix*.16}{Appendix}{}
|
|
4675
tommath.src
4675
tommath.src
File diff suppressed because it is too large
Load Diff
8141
tommath.tex
8141
tommath.tex
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user