forked from ibphoenix/tomsfastmath
Merge branch 'release/0.13.1'
This commit is contained in:
commit
e3b0c71363
@ -28,5 +28,5 @@ after_failure:
|
||||
after_script:
|
||||
- cat test_gcc_2.txt
|
||||
notifications:
|
||||
irc: "chat.freenode.net#libtom"
|
||||
irc: "chat.freenode.net#libtom-notifications"
|
||||
|
||||
|
@ -9,3 +9,4 @@ Project Status
|
||||
|
||||
master: [![Build Status](https://travis-ci.org/libtom/tomsfastmath.svg?branch=master)](https://travis-ci.org/libtom/tomsfastmath)
|
||||
|
||||
develop: [![Build Status](https://travis-ci.org/libtom/tomsfastmath.svg?branch=develop)](https://travis-ci.org/libtom/tomsfastmath)
|
||||
|
@ -1,3 +1,9 @@
|
||||
April 4th, 2017
|
||||
v0.13.1
|
||||
-- Fix missing fp_rand symbol in shared library
|
||||
-- Fix some parameters in API signatures that should've been const
|
||||
-- Bugfixes and improvements contributed by Sebastian Siewior, Reiner Herrmann and Mathias Tausig
|
||||
|
||||
October 24th, 2015
|
||||
v0.13.0
|
||||
-- Add fp_rand()
|
||||
|
BIN
doc/tfm.pdf
BIN
doc/tfm.pdf
Binary file not shown.
@ -31,6 +31,7 @@ fp_mul_d
|
||||
fp_mulmod
|
||||
fp_prime_random_ex
|
||||
fp_radix_size
|
||||
fp_rand
|
||||
fp_read_radix
|
||||
fp_read_signed_bin
|
||||
fp_read_unsigned_bin
|
||||
|
29
makefile
29
makefile
@ -1,7 +1,7 @@
|
||||
#makefile for TomsFastMath
|
||||
#
|
||||
#
|
||||
VERSION=0.13
|
||||
VERSION=0.13.1
|
||||
|
||||
CFLAGS += -Wall -W -Wshadow -Isrc/headers
|
||||
|
||||
@ -21,6 +21,22 @@ ifndef MAKE
|
||||
MAKE=make
|
||||
endif
|
||||
|
||||
ifeq ($V,1)
|
||||
silent=
|
||||
else
|
||||
silent=@
|
||||
endif
|
||||
|
||||
%.o: %.c
|
||||
ifneq ($V,1)
|
||||
@echo " * ${CC} $@"
|
||||
endif
|
||||
${silent} ${CC} ${CFLAGS} -c $< -o $@
|
||||
|
||||
ifdef COMPILE_DEBUG
|
||||
#debug
|
||||
CFLAGS += -g3
|
||||
else
|
||||
ifndef IGNORE_SPEED
|
||||
|
||||
CFLAGS += -O3 -funroll-loops
|
||||
@ -32,6 +48,7 @@ CFLAGS += -O3 -funroll-loops
|
||||
#speed
|
||||
CFLAGS += -fomit-frame-pointer
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
#START_INS
|
||||
@ -103,6 +120,11 @@ install: $(LIBNAME)
|
||||
install -g $(GROUP) -o $(USER) $(LIBNAME) $(DESTDIR)$(LIBPATH)
|
||||
install -g $(GROUP) -o $(USER) $(HEADERS_PUB) $(DESTDIR)$(INCPATH)
|
||||
|
||||
HEADER_FILES=$(notdir $(HEADERS_PUB))
|
||||
uninstall:
|
||||
rm $(DESTDIR)$(LIBPATH)/$(LIBNAME)
|
||||
rm $(HEADER_FILES:%=$(DESTDIR)$(INCPATH)/%)
|
||||
|
||||
.PHONY: mtest
|
||||
mtest: $(LIBNAME)
|
||||
cd mtest; CC="$(CC)" CFLAGS="$(CFLAGS) -I../" MAKE=${MAKE} ${MAKE} mtest
|
||||
@ -189,9 +211,10 @@ zipup:
|
||||
rm -rf ../tomsfastmath-$(VERSION) && rm -f ../tfm-$(VERSION).zip ../tfm-$(VERSION).tar.bz2 && \
|
||||
expsrc.sh -i . -o ../tomsfastmath-$(VERSION) --svntags --no-fetch -p '*.c' -p '*.h' && \
|
||||
MAKE=${MAKE} ${MAKE} -C ../tomsfastmath-$(VERSION) docs && \
|
||||
tar -c ../tomsfastmath-$(VERSION)/* | bzip2 -9vvc > ../tfm-$(VERSION).tar.bz2 && \
|
||||
tar -c ../tomsfastmath-$(VERSION)/* | xz -cz > ../tfm-$(VERSION).tar.xz && \
|
||||
find ../tomsfastmath-$(VERSION)/ -type f -exec unix2dos -q {} \; && \
|
||||
zip -9 -r ../tfm-$(VERSION).zip ../tomsfastmath-$(VERSION)/* && \
|
||||
gpg -b -a ../tfm-$(VERSION).tar.bz2 && gpg -b -a ../tfm-$(VERSION).zip
|
||||
gpg -b -a ../tfm-$(VERSION).tar.xz && gpg -b -a ../tfm-$(VERSION).zip
|
||||
|
||||
new_file:
|
||||
bash updatemakes.sh
|
||||
|
@ -47,7 +47,8 @@ src/sqr/fp_sqr_comba_48.o src/sqr/fp_sqr_comba_4.o src/sqr/fp_sqr_comba_64.o src
|
||||
src/sqr/fp_sqr_comba_7.o src/sqr/fp_sqr_comba_8.o src/sqr/fp_sqr_comba_9.o src/sqr/fp_sqr_comba.o \
|
||||
src/sqr/fp_sqr_comba_generic.o src/sqr/fp_sqr_comba_small_set.o src/sqr/fp_sqrmod.o
|
||||
|
||||
HEADERS=src/headers/tfm.h
|
||||
HEADERS_PUB:=src/headers/tfm.h
|
||||
HEADERS=src/headers/tfm_private.h $(HEADERS_PUB)
|
||||
|
||||
#END_INS
|
||||
|
||||
@ -88,13 +89,18 @@ $(OBJECTS): $(HEADERS)
|
||||
$(LTCOMPILE) $(CFLAGS) $(LDFLAGS) -o $@ -c $<
|
||||
|
||||
$(LIBNAME): $(OBJECTS)
|
||||
libtool --silent --mode=link --tag=CC $(CC) $(CFLAGS) $(LDFLAGS) `find . -type f | grep "[.]lo" | xargs` -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION) -export-symbols libtfm.symbols
|
||||
libtool --mode=link --tag=CC $(CC) $(CFLAGS) $(LDFLAGS) `find . -type f | LC_ALL=C sort | grep "[.]lo" | xargs` -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION) -export-symbols libtfm.symbols
|
||||
|
||||
install: $(LIBNAME)
|
||||
install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH)
|
||||
libtool --silent --mode=install install -c $(LIBNAME) $(DESTDIR)$(LIBPATH)/$(LIBNAME)
|
||||
libtool --mode=install install -c $(LIBNAME) $(DESTDIR)$(LIBPATH)/$(LIBNAME)
|
||||
install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH)
|
||||
install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH)
|
||||
install -g $(GROUP) -o $(USER) $(HEADERS_PUB) $(DESTDIR)$(INCPATH)
|
||||
|
||||
HEADER_FILES=$(notdir $(HEADERS_PUB))
|
||||
uninstall:
|
||||
libtool --mode=uninstall rm $(DESTDIR)$(LIBPATH)/$(LIBNAME)
|
||||
rm $(HEADER_FILES:%=$(DESTDIR)$(INCPATH)/%)
|
||||
|
||||
mtest/mtest: mtest/mtest.c
|
||||
cd mtest ; make mtest
|
||||
|
@ -9,6 +9,7 @@
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
|
@ -22,8 +22,8 @@
|
||||
* Patch
|
||||
* XX - undefined
|
||||
*/
|
||||
#define TFM_VERSION 0x000D0000
|
||||
#define TFM_VERSION_S "v0.13.0"
|
||||
#define TFM_VERSION 0x000D0100
|
||||
#define TFM_VERSION_S "v0.13.1"
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(x,y) ((x)<(y)?(x):(y))
|
||||
@ -252,6 +252,17 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* use arc4random on platforms that support it */
|
||||
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
|
||||
#define FP_GEN_RANDOM() arc4random()
|
||||
#define FP_GEN_RANDOM_MAX 0xffffffff
|
||||
#endif
|
||||
|
||||
/* use rand() as fall-back if there's no better rand function */
|
||||
#ifndef FP_GEN_RANDOM
|
||||
#define FP_GEN_RANDOM() rand()
|
||||
#define FP_GEN_RANDOM_MAX RAND_MAX
|
||||
#endif
|
||||
|
||||
/* some default configurations.
|
||||
*/
|
||||
|
@ -9,7 +9,31 @@
|
||||
*/
|
||||
#include <tfm_private.h>
|
||||
|
||||
#if FP_GEN_RANDOM_MAX == 0xffffffff
|
||||
#define FP_GEN_RANDOM_SHIFT 32
|
||||
#elif FP_GEN_RANDOM_MAX == 32767
|
||||
/* SHRT_MAX */
|
||||
#define FP_GEN_RANDOM_SHIFT 15
|
||||
#elif FP_GEN_RANDOM_MAX == 2147483647
|
||||
/* INT_MAX */
|
||||
#define FP_GEN_RANDOM_SHIFT 31
|
||||
#elif !defined(FP_GEN_RANDOM_SHIFT)
|
||||
#error Thou shalt define their own valid FP_GEN_RANDOM_SHIFT
|
||||
#endif
|
||||
|
||||
/* makes a pseudo-random int of a given size */
|
||||
static fp_digit fp_gen_random(void)
|
||||
{
|
||||
fp_digit d = 0, msk = 0;
|
||||
do {
|
||||
d <<= FP_GEN_RANDOM_SHIFT;
|
||||
d |= ((fp_digit) FP_GEN_RANDOM());
|
||||
msk <<= FP_GEN_RANDOM_SHIFT;
|
||||
msk |= FP_GEN_RANDOM_MAX;
|
||||
} while ((FP_MASK & msk) != FP_MASK);
|
||||
d &= FP_MASK;
|
||||
return d;
|
||||
}
|
||||
|
||||
void fp_rand(fp_int *a, int digits)
|
||||
{
|
||||
@ -22,14 +46,14 @@ void fp_rand(fp_int *a, int digits)
|
||||
|
||||
/* first place a random non-zero digit */
|
||||
do {
|
||||
d = ((fp_digit) abs (rand ())) & FP_MASK;
|
||||
d = fp_gen_random();
|
||||
} while (d == 0);
|
||||
|
||||
fp_add_d (a, d, a);
|
||||
|
||||
while (--digits > 0) {
|
||||
fp_lshd (a, 1);
|
||||
fp_add_d (a, ((fp_digit) abs (rand ())), a);
|
||||
fp_add_d (a, fp_gen_random(), a);
|
||||
}
|
||||
|
||||
return;
|
||||
|
17
tfm.tex
17
tfm.tex
@ -49,7 +49,7 @@
|
||||
\begin{document}
|
||||
\frontmatter
|
||||
\pagestyle{empty}
|
||||
\title{TomsFastMath User Manual \\ v0.13.0}
|
||||
\title{TomsFastMath User Manual \\ v0.13.1}
|
||||
\author{Tom St Denis \\ tomstdenis@gmail.com}
|
||||
\maketitle
|
||||
This text and library are all hereby placed in the public domain. This book has been formatted for B5
|
||||
@ -279,6 +279,21 @@ void fp_init_copy(fp_int *a, fp_int *b)
|
||||
This will initialize $a$ as a copy of $b$. Note that for compatibility with LibTomMath the function
|
||||
fp\_copy() is also provided.
|
||||
|
||||
\subsection{Initialization with a random value}
|
||||
To initialize an integer with a random value of a specific length use the fp\_rand() function.
|
||||
|
||||
\index{fp\_rand}
|
||||
\begin{verbatim}
|
||||
void fp_rand(fp_int *a, int digits)
|
||||
\end{verbatim}
|
||||
|
||||
This will initialize $a$ with $digits$ random digits.
|
||||
|
||||
\index{FP\_GEN\_RANDOM} \index{FP\_GEN\_RANDOM\_MAX}
|
||||
The source of the random data is \textbf{arc4random()} on *BSD systems that provide this function
|
||||
and the standard C function \textbf{rand()} on all other systems. It can be configured at compile time
|
||||
by pre-defining \textbf{FP\_GEN\_RANDOM} and \textbf{FP\_GEN\_RANDOM\_MAX}.
|
||||
|
||||
\chapter{Arithmetic Operations}
|
||||
\section{Odds and Evens}
|
||||
To quickly and easily tell if an integer is zero, odd or even use the following functions.
|
||||
|
Loading…
Reference in New Issue
Block a user