-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 Comment: Gnu Privacy Tools
 
 iF4EABEIAAYFAl2uz5oACgkQrwyxdiHtrXLIngD/WoeRRt9sYkjNiSmiKYuBvgAi
 pF0Sdfe7vAAhY3jpRX0A/2rJdJFGiFiuAB72qWiGJZg0Rr+kbOGwKfvYgE6jROw6
 =EL7p
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 Comment: Gnu Privacy Tools
 
 iF4EABEIAAYFAl2u0EEACgkQrwyxdiHtrXIQkQD+I8Z6IYTtVmG0patanpT1EFyA
 SZUKP2z50owej4uF3QAA/32m1dmpG6MSYhfu9zu4435PwaI+RgCaUrZ1YaoWroXJ
 =agqw
 -----END PGP SIGNATURE-----

Merge tag 'v1.2.0' into develop

v1.2.0
This commit is contained in:
Steffen Jaeckel 2019-10-22 11:47:42 +02:00
commit d06e2986ca
23 changed files with 68 additions and 6777 deletions

View File

@ -1,4 +1,4 @@
version: 1.1.0-{build}
version: 1.2.0-{build}
branches:
only:
- master
@ -6,10 +6,12 @@ branches:
- /^release/
- /^travis/
image:
- Visual Studio 2019
- Visual Studio 2017
- Visual Studio 2015
build_script:
- cmd: >-
if "Visual Studio 2019"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
if "Visual Studio 2017"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
if "Visual Studio 2015"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
if "Visual Studio 2015"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64

View File

@ -1,3 +1,40 @@
XXX XXth, 2019
v1.2.0
-- A huge refactoring of the library happened - renaming,
deprecating and replacing existing functions by improved API's.
All deprecated functions, macros and symbols are only marked as such
so this version is still API and ABI compatible to v1.x.
-- Daniel Mendler was pushing for those changes and contributing a load of patches,
refactorings, code reviews and whatnotelse.
-- Christoph Zurnieden re-worked internals of the library, improved the performance,
did code reviews and wrote documentation.
-- Francois Perrad did some refactoring and took again care of linting the sources and
provided all fixes.
-- Jan Nijtmans, Karel Miko and Joachim Breitner contributed various patches.
-- Private symbols can now be hidden for the shared library builds, disabled by default.
-- All API's follow a single code style, are prefixed the same etc.
-- Unified, safer and improved API's
-- Less magic numbers - return values (where appropriate) and most flags are now enums,
this was implemented in a backwards compatible way where return values were int.
-- API's with return values are now by default marked as "warn on unsused result", this
can be disabled if required (which will most likely hide bugs), c.f. MP_WUR in tommath.h
-- Provide a whole set of setters&getters for different primitive types (long, uint32_t, etc.)
-- All those primitive setters are now optimized.
-- It's possible to automatically tune the cutoff values for Karatsuba&Toom-Cook
-- The custom allocators which were formerly known as XMALLOC(), XFREE() etc. are now available
as MP_MALLOC(), MP_REALLOC(), MP_CALLOC() and MP_FREE(). MP_REALLOC() and MP_FREE() now also
provide the allocated size to ease the usage of simple allocators without tracking.
-- Building is now also possible with MSVC 2015, 2017 and 2019 (use makefile.msvc)
-- Added mp_decr() and mp_incr()
-- Added mp_log_u32()
-- Improved prime-checking
-- Improved Toom-Cook multiplication
-- Removed the LTM book (`make docs` now builds the user manual)
Jan 28th, 2019
v1.1.0
-- Christoph Zurnieden contributed FIPS 186.4 compliant

View File

@ -50,7 +50,7 @@
\begin{document}
\frontmatter
\pagestyle{empty}
\title{LibTomMath User Manual \\ v1.1.0}
\title{LibTomMath User Manual \\ v1.2.0}
\author{LibTom Projects \\ www.libtom.net}
\maketitle
This text, the library and the accompanying textbook are all hereby placed in the public domain. This book has been
@ -825,7 +825,8 @@ int main(void)
These functions can be used to set a constant with 32 or 64 bits.
\index{mp\_set\_int}
\index{mp\_set\_i32} \index{mp\_set\_u32}
\index{mp\_set\_i64} \index{mp\_set\_u64}
\begin{alltt}
void mp_set_i32 (mp_int * a, int32_t b);
void mp_set_u32 (mp_int * a, uint32_t b);
@ -836,7 +837,8 @@ void mp_set_u64 (mp_int * a, uint64_t b);
These functions assign the sign and value of the input \texttt{b} to \texttt{mp\_int a}.
The value can be obtained again by calling the following functions.
\index{mp\_get\_int}
\index{mp\_get\_i32} \index{mp\_get\_u32} \index{mp\_get\_mag\_u32}
\index{mp\_get\_i64} \index{mp\_get\_u64} \index{mp\_get\_mag\_u64}
\begin{alltt}
int32_t mp_get_i32 (mp_int * a);
uint32_t mp_get_u32 (mp_int * a);
@ -881,7 +883,7 @@ number == 654321
\subsection{Long Constants - platform dependant}
\index{mp\_set\_ulong}
\index{mp\_set\_l} \index{mp\_set\_ul}
\begin{alltt}
void mp_set_l (mp_int * a, long b);
void mp_set_ul (mp_int * a, unsigned long b);
@ -891,7 +893,7 @@ This will assign the value of the platform-dependent sized variable $b$ to the m
To retrieve the value, the following functions can be used.
\index{mp\_get\_ulong}
\index{mp\_get\_l} \index{mp\_get\_ul} \index{mp\_get\_mag\_ul}
\begin{alltt}
long mp_get_l (mp_int * a);
unsigned long mp_get_ul (mp_int * a);
@ -902,7 +904,7 @@ This will return the least significant bits of the mp\_int $a$ that fit into a `
\subsection{Long Long Constants - platform dependant}
\index{mp\_set\_ulonglong}
\index{mp\_set\_ll} \index{mp\_set\_ull}
\begin{alltt}
void mp_set_ll (mp_int * a, long long b);
void mp_set_ull (mp_int * a, unsigned long long b);
@ -912,7 +914,9 @@ This will assign the value of the platform-dependent sized variable $b$ to the m
To retrieve the value, the following functions can be used.
\index{mp\_get\_ulonglong}
\index{mp\_get\_ll}
\index{mp\_get\_ull}
\index{mp\_get\_mag\_ull}
\begin{alltt}
long long mp_get_ll (mp_int * a);
unsigned long long mp_get_ull (mp_int * a);
@ -2073,7 +2077,7 @@ mp\_prime\_is\_prime for details regarding the use of the argument $t$. Set $bb
want only the next prime congruent to $3 \mbox{ mod } 4$, otherwise set it to zero to find any next prime.
\section{Random Primes}
\index{mp\_prime\_random\_ex}
\index{mp\_prime\_rand}
\begin{alltt}
int mp_prime_rand(mp_int *a, int t,
int size, int flags);

View File

@ -1,296 +0,0 @@
#!/bin/perl
#
#Used to prepare the book "tommath.src" for LaTeX by pre-processing it into a .tex file
#
#Essentially you write the "tommath.src" as normal LaTex except where you want code snippets you put
#
#EXAM,file
#
#This preprocessor will then open "file" and insert it as a verbatim copy.
#
#Tom St Denis
use strict;
#get graphics type
my $graph;
if (shift =~ /PDF/) {
$graph = "";
} else {
$graph = ".ps";
}
open(my $in, '<', 'tommath.src') or die "Can't open source file";
open(my $out, '>', 'tommath.tex') or die "Can't open destination file";
print "Scanning for sections\n";
my $chapter = 0;
my $section = 0;
my $subsection = 0;
my $x = 0;
my %index1;
my %index2;
my %index3;
while (<$in>) {
print ".";
if (!(++$x % 80)) { print "\n"; }
#update the headings
if (~($_ =~ /\*/)) {
if ($_ =~ /\\chapter\{.+}/) {
++$chapter;
$section = $subsection = 0;
} elsif ($_ =~ /\\section\{.+}/) {
++$section;
$subsection = 0;
} elsif ($_ =~ /\\subsection\{.+}/) {
++$subsection;
}
}
if ($_ =~ m/MARK/) {
my @m = split ',', $_;
chomp $m[1];
$index1{$m[1]} = $chapter;
$index2{$m[1]} = $section;
$index3{$m[1]} = $subsection;
}
}
close $in;
open($in, '<', 'tommath.src') or die "Can't open source file";
my $readline = 0;
my $wroteline = 0;
my $srcline = 0;
my $totlines;
my @text;
while (<$in>) {
++$readline;
++$srcline;
if ($_ =~ m/MARK/) {
} elsif ($_ =~ m/EXAM/ || $_ =~ m/LIST/) {
my $skipheader;
if ($_ =~ m/EXAM/) {
$skipheader = 1;
} else {
$skipheader = 0;
}
# EXAM,file
chomp($_);
my @m = split ',', $_;
open(my $src, '<', "../$m[1]") or die "Error:$srcline:Can't open source file $m[1]";
print "$srcline:Inserting $m[1]:";
my $line = 0;
my $tmp = $m[1];
my $fun = $tmp;
$tmp =~ s/_/"\\_"/ge;
$fun =~ s/^bn_//;
$fun =~ s/\.c$//;
$fun =~ s/_/"\\_"/ge;
print {$out} "\\index{$fun}\\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
while (<$src>) {
if ($_ =~ /#ifdef BN/) {
printf {$out} ("%03d ", $line);
for ($x = 0; $x < length($_); $x++) {
print {$out} chr(vec($_, $x, 8));
if ($x == 75) {
print {$out} "\n ";
++$wroteline;
}
}
print {$out} "...\n";
++$wroteline;
}
$text[$line++] = $_;
last if ($_ =~ /libtom\.org/);
}
<$src>;
$text[$line++] = $_;
<$src>;
$text[$line++] = $_;
}
my $inline = 0;
while (<$src>) {
$text[$line++] = $_;
++$inline;
chomp($_);
$_ =~ s/\t/" "/ge;
$_ =~ s/{/"^{"/ge;
$_ =~ 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) {
print {$out} "\n ";
++$wroteline;
}
}
print {$out} "\n";
++$wroteline;
}
$totlines = $line;
print {$out} "\\end{alltt}\n\\end{small}\n";
close $src;
print "$inline lines\n";
$wroteline += 2;
} elsif ($_ =~ m/@\d+,.+@/) {
# line contains [number,text]
# e.g. @14,for (ix = 0)@
my $txt = $_;
while ($txt =~ m/@\d+,.+@/) {
my @m = split '@', $txt; # splits into text, one, two
my @parms = split ',', $m[1]; # splits one,two into two elements
# now search from $parms[0] down for $parms[1]
my $found;
my $found1 = 0;
my $found2 = 0;
my $foundline;
my $foundline1;
my $foundline2;
for (my $i = $parms[0]; $i < $totlines && $found1 == 0; $i++) {
if ($text[$i] =~ m/\Q$parms[1]\E/) {
$foundline1 = $i + 1;
$found1 = 1;
}
}
# now search backwards
for (my $i = $parms[0] - 1; $i >= 0 && $found2 == 0; $i--) {
if ($text[$i] =~ m/\Q$parms[1]\E/) {
$foundline2 = $i + 1;
$found2 = 1;
}
}
# now use the closest match or the first if tied
if ($found1 == 1 && $found2 == 0) {
$found = 1;
$foundline = $foundline1;
} elsif ($found1 == 0 && $found2 == 1) {
$found = 1;
$foundline = $foundline2;
} elsif ($found1 == 1 && $found2 == 1) {
$found = 1;
if (($foundline1 - $parms[0]) <= ($parms[0] - $foundline2)) {
$foundline = $foundline1;
} else {
$foundline = $foundline2;
}
} else {
$found = 0;
}
# if found replace
if ($found == 1) {
my $delta = $parms[0] - $foundline;
print "Found replacement tag for \"$parms[1]\" on line $srcline which refers to line $foundline (delta $delta)\n";
$_ =~ s/@\Q$m[1]\E@/$foundline/;
} 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
$txt = "";
for (my $i = 2; $i < scalar(@m); $i++) {
$txt = $txt . $m[$i] . "@";
}
}
print {$out} $_;
++$wroteline;
} elsif ($_ =~ /~.+~/) {
# line contains a ~text~ pair used to refer to indexing :-)
my $txt = $_;
while ($txt =~ /~.+~/) {
my @m = split '~', $txt;
# word is the second position
my $word = $m[1];
my $a = $index1{$word};
my $b = $index2{$word};
my $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";
} else {
# format the tag as x, x.y or x.y.z depending on the values
my $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) {
if ($a == 1) {
$str = "chapter one";
} elsif ($a == 2) {
$str = "chapter two";
} elsif ($a == 3) {
$str = "chapter three";
} elsif ($a == 4) {
$str = "chapter four";
} elsif ($a == 5) {
$str = "chapter five";
} elsif ($a == 6) {
$str = "chapter six";
} elsif ($a == 7) {
$str = "chapter seven";
} elsif ($a == 8) {
$str = "chapter eight";
} elsif ($a == 9) {
$str = "chapter nine";
} elsif ($a == 10) {
$str = "chapter ten";
}
} else {
$str = "chapter " . $str;
}
} else {
$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
$txt = "";
for (my $i = 2; $i < scalar(@m); $i++) {
$txt = $txt . $m[$i] . "~";
}
}
print {$out} $_;
++$wroteline;
} elsif ($_ =~ m/FIGU/) {
# FIGU,file,caption
chomp($_);
my @m = split ',', $_;
print {$out} "\\begin{center}\n\\begin{figure}[h]\n\\includegraphics{pics/$m[1]$graph}\n";
print {$out} "\\caption{$m[2]}\n\\label{pic:$m[1]}\n\\end{figure}\n\\end{center}\n";
$wroteline += 4;
} else {
print {$out} $_;
++$wroteline;
}
}
print "Read $readline lines, wrote $wroteline lines\n";
close $out;
close $in;
system('perl -pli -e "s/\s*$//" tommath.tex');

View File

@ -9,41 +9,10 @@ ifeq ($(PLATFORM), Darwin)
err:
$(error Docs can't be built on Mac)
docdvi poster docs mandvi manual: err
docs mandvi manual: err
endif
# makes the LTM book DVI file, requires tetex, perl and makeindex [part of tetex I think]
docdvi: tommath.src
${MAKE} -C pics/ MAKE=${MAKE}
echo "hello" ${silent_stdout}
perl booker.pl
touch tommath.ind
latex tommath ${silent_stdout}
latex tommath ${silent_stdout}
makeindex tommath
latex tommath ${silent_stdout}
# poster, makes the single page PDF poster
poster: poster.tex
cp poster.tex poster.bak
touch --reference=poster.tex poster.bak
(printf "%s" "\def\fixedpdfdate{"; date +'D:%Y%m%d%H%M%S%:z' -d @$$(stat --format=%Y poster.tex) | sed "s/:\([0-9][0-9]\)$$/'\1'}/g") > poster-deterministic.tex
printf "%s\n" "\pdfinfo{" >> poster-deterministic.tex
printf "%s\n" " /CreationDate (\fixedpdfdate)" >> poster-deterministic.tex
printf "%s\n}\n" " /ModDate (\fixedpdfdate)" >> poster-deterministic.tex
cat poster.tex >> poster-deterministic.tex
mv poster-deterministic.tex poster.tex
touch --reference=poster.bak poster.tex
pdflatex poster
sed -b -i 's,^/ID \[.*\]$$,/ID [<0> <0>],g' poster.pdf
mv poster.bak poster.tex
rm -f poster.aux poster.log poster.out
# 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
${MAKE} -C pics/ clean MAKE=${MAKE}
docs: manual
#LTM user manual
mandvi: bn.tex
@ -70,5 +39,4 @@ manual: mandvi
rm -f bn.aux bn.dvi bn.log bn.idx bn.lof bn.out bn.toc
clean:
${MAKE} -C pics/ clean MAKE=${MAKE}
rm -f *.idx *.toc *.log *.aux *.dvi *.lof *.ind *.ilg *.ps *.log tommath.tex

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,35 +0,0 @@
# makes the images... yeah
default: pses
design_process.ps: design_process.tif
tiff2ps -s -e design_process.tif > design_process.ps
sliding_window.ps: sliding_window.tif
tiff2ps -s -e sliding_window.tif > sliding_window.ps
expt_state.ps: expt_state.tif
tiff2ps -s -e expt_state.tif > expt_state.ps
primality.ps: primality.tif
tiff2ps -s -e primality.tif > primality.ps
design_process.pdf: design_process.ps
epstopdf design_process.ps
sliding_window.pdf: sliding_window.ps
epstopdf sliding_window.ps
expt_state.pdf: expt_state.ps
epstopdf expt_state.ps
primality.pdf: primality.ps
epstopdf primality.ps
pses: sliding_window.ps expt_state.ps primality.ps design_process.ps
pdfes: sliding_window.pdf expt_state.pdf primality.pdf design_process.pdf
clean:
rm -rf *.ps *.pdf .xvpics

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,35 +0,0 @@
\documentclass[landscape,11pt]{article}
\usepackage{amsmath, amssymb}
\usepackage{hyperref}
\begin{document}
\hspace*{-3in}
\begin{tabular}{llllll}
$c = a + b$ & {\tt mp\_add(\&a, \&b, \&c)} & $b = 2a$ & {\tt mp\_mul\_2(\&a, \&b)} & \\
$c = a - b$ & {\tt mp\_sub(\&a, \&b, \&c)} & $b = a/2$ & {\tt mp\_div\_2(\&a, \&b)} & \\
$c = ab $ & {\tt mp\_mul(\&a, \&b, \&c)} & $c = 2^ba$ & {\tt mp\_mul\_2d(\&a, b, \&c)} \\
$b = a^2 $ & {\tt mp\_sqr(\&a, \&b)} & $c = a/2^b, d = a \mod 2^b$ & {\tt mp\_div\_2d(\&a, b, \&c, \&d)} \\
$c = \lfloor a/b \rfloor, d = a \mod b$ & {\tt mp\_div(\&a, \&b, \&c, \&d)} & $c = a \mod 2^b $ & {\tt mp\_mod\_2d(\&a, b, \&c)} \\
&& \\
$a = b $ & {\tt mp\_set\_int(\&a, b)} & $c = a \vee b$ & {\tt mp\_or(\&a, \&b, \&c)} \\
$b = a $ & {\tt mp\_copy(\&a, \&b)} & $c = a \wedge b$ & {\tt mp\_and(\&a, \&b, \&c)} \\
&& $c = a \oplus b$ & {\tt mp\_xor(\&a, \&b, \&c)} \\
& \\
$b = -a $ & {\tt mp\_neg(\&a, \&b)} & $d = a + b \mod c$ & {\tt mp\_addmod(\&a, \&b, \&c, \&d)} \\
$b = |a| $ & {\tt mp\_abs(\&a, \&b)} & $d = a - b \mod c$ & {\tt mp\_submod(\&a, \&b, \&c, \&d)} \\
&& $d = ab \mod c$ & {\tt mp\_mulmod(\&a, \&b, \&c, \&d)} \\
Compare $a$ and $b$ & {\tt mp\_cmp(\&a, \&b)} & $c = a^2 \mod b$ & {\tt mp\_sqrmod(\&a, \&b, \&c)} \\
Is Zero? & {\tt mp\_iszero(\&a)} & $c = a^{-1} \mod b$ & {\tt mp\_invmod(\&a, \&b, \&c)} \\
Is Even? & {\tt mp\_iseven(\&a)} & $d = a^b \mod c$ & {\tt mp\_exptmod(\&a, \&b, \&c, \&d)} \\
Is Odd ? & {\tt mp\_isodd(\&a)} \\
&\\
$\vert \vert a \vert \vert$ & {\tt mp\_unsigned\_bin\_size(\&a)} & $res$ = 1 if $a$ prime to $t$ rounds? & {\tt mp\_prime\_is\_prime(\&a, t, \&res)} \\
$buf \leftarrow a$ & {\tt mp\_to\_unsigned\_bin(\&a, buf)} & Next prime after $a$ to $t$ rounds. & {\tt mp\_prime\_next\_prime(\&a, t, bbs\_style)} \\
$a \leftarrow buf[0..len-1]$ & {\tt mp\_read\_unsigned\_bin(\&a, buf, len)} \\
&\\
$b = \sqrt{a}$ & {\tt mp\_sqrt(\&a, \&b)} & $c = \mbox{gcd}(a, b)$ & {\tt mp\_gcd(\&a, \&b, \&c)} \\
$c = a^{1/b}$ & {\tt mp\_n\_root(\&a, b, \&c)} & $c = \mbox{lcm}(a, b)$ & {\tt mp\_lcm(\&a, \&b, \&c)} \\
&\\
Greater Than & MP\_GT & Equal To & MP\_EQ \\
Less Than & MP\_LT & Bits per digit & DIGIT\_BIT \\
\end{tabular}
\end{document}

File diff suppressed because it is too large Load Diff

View File

@ -115,7 +115,7 @@ tune: $(LIBNAME)
coveralls: lcov
coveralls-lcov
docdvi poster docs mandvi manual:
docs manual:
$(MAKE) -C doc/ $@ V=$(V)
.PHONY: pre_gen
@ -125,7 +125,7 @@ pre_gen:
sed -e 's/[[:blank:]]*$$//' mpi.c > pre_gen/mpi.c
rm mpi.c
zipup: clean astyle new_file manual poster docs
zipup: clean astyle new_file docs
@# Update the index, so diff-index won't fail in case the pdf has been created.
@# As the pdf creation modifies the tex files, git sometimes detects the
@# modified files, but misses that it's put back to its original version.
@ -137,12 +137,11 @@ zipup: clean astyle new_file manual poster docs
@echo 'fixme check'
-@(find libtommath-$(VERSION)/ -type f | xargs grep 'FIXM[E]') && echo '############## BEWARE: the "fixme" marker was found !!! ##############' || true
mkdir -p libtommath-$(VERSION)/doc
cp doc/bn.pdf doc/tommath.pdf doc/poster.pdf libtommath-$(VERSION)/doc/
cp doc/bn.pdf libtommath-$(VERSION)/doc/
$(MAKE) -C libtommath-$(VERSION)/ pre_gen
tar -c libtommath-$(VERSION)/ | xz -6e -c - > ltm-$(VERSION).tar.xz
zip -9rq ltm-$(VERSION).zip libtommath-$(VERSION)
cp doc/bn.pdf bn-$(VERSION).pdf
cp doc/tommath.pdf tommath-$(VERSION).pdf
rm -rf libtommath-$(VERSION)
gpg -b -a ltm-$(VERSION).tar.xz
gpg -b -a ltm-$(VERSION).zip

View File

@ -14,7 +14,7 @@ PREFIX = c:\devel
CFLAGS = /Ox
#Compilation flags
LTM_CFLAGS = /nologo /I./ /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_DEPRECATE /D__STDC_WANT_SECURE_LIB__=1 /D_CRT_HAS_CXX17=0 /Wall /wd4146 /wd4127 /wd4710 /wd4711 /wd4820 /wd4003 /WX $(CFLAGS)
LTM_CFLAGS = /nologo /I./ /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_DEPRECATE /D__STDC_WANT_SECURE_LIB__=1 /D_CRT_HAS_CXX17=0 /Wall /wd4146 /wd4127 /wd4668 /wd4710 /wd4711 /wd4820 /wd5045 /WX $(CFLAGS)
LTM_LDFLAGS = advapi32.lib
#Libraries to be created (this makefile builds only static libraries)

View File

@ -21,7 +21,7 @@ RANLIB = ranlib
CFLAGS = -O2
LDFLAGS =
VERSION = 1.1.0
VERSION = 1.2.0
#Compilation flags
LTM_CFLAGS = -I. $(CFLAGS)

View File

@ -3,9 +3,9 @@
#
#version of library
VERSION=1.1.0-develop
VERSION_PC=1.1.0
VERSION_SO=2:0:1
VERSION=1.2.0
VERSION_PC=1.2.0
VERSION_SO=3:0:2
PLATFORM := $(shell uname | sed -e 's/_.*//')

View File

@ -494,7 +494,7 @@ void mp_set(mp_int *mp, mp_digit d)
mp_err mp_set_int(mp_int *mp, long z)
{
int ix;
unsigned long v = abs(z);
unsigned long v = labs(z);
mp_err res;
ARGCHK(mp != NULL, MP_BADARG);

View File

@ -27,16 +27,9 @@ static mp_err s_read_arc4random(void *p, size_t n)
#define ARM
#endif
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning (disable : 4668)
#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <wincrypt.h>
#ifdef _MSC_VER
# pragma warning(pop)
#endif
static mp_err s_read_wincsp(void *p, size_t n)
{

View File

@ -140,6 +140,10 @@ extern void MP_FREE(void *mem, size_t size);
#endif
/* feature detection macro */
#ifdef _MSC_VER
/* Prevent false positive: not enough arguments for function-like macro invocation */
#pragma warning(disable: 4003)
#endif
#define MP_STRINGIZE(x) MP__STRINGIZE(x)
#define MP__STRINGIZE(x) ""#x""
#define MP_HAS(x) (sizeof(MP_STRINGIZE(x##_C)) == 1u)