Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ libtommath.pc
gcc_errors_*.txt
test_*.txt

.#*
*~
*.bak
*.orig
*.asc
Expand Down
81 changes: 55 additions & 26 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ branches:
only:
- master
- develop
- /^release\/.*$/
- /^release/
- /^travis/

# Additional installs are Valgrind for the memory-tests
# and gcc-multilib for the compilation of the different
# architectures.
# Additional installs: Valgrind for memory tests.
install:
- sudo apt-get update -qq
- sudo apt-get install valgrind
- sudo apt-get install gcc-multilib
- apt-cache search gcc | grep '^gcc-[0-9\.]* '
- apt-cache search clang | grep compiler

# The language is C and it will load the respective dependencies
language: c
Expand All @@ -66,60 +66,90 @@ matrix:
apt:
packages:
- astyle
sudo: required

# GCC for the 32-bit architecture (no valgrind yet)
- env: BUILDOPTIONS='--with-cc=gcc --with-m32'
- env: BUILDOPTIONS='--with-cc=gcc-5 --with-m32'
addons:
apt:
packages:
- libc6-dev-i386
sudo: required
- gcc-multilib

# clang for the 32-bit architecture (no valgrind yet)
- env: BUILDOPTIONS='--with-cc=clang --with-m32'
- env: BUILDOPTIONS='--with-cc=clang-7 --with-m32'
addons:
apt:
packages:
- libc6-dev-i386
sudo: required
- gcc-multilib

# GCC for the x64_32 architecture (32-bit longs and 32-bit pointers)
# TODO: Probably not possible to run anything in x32 in Travis
# but needs to be checked to be sure.
- env: BUILDOPTIONS='--with-cc=gcc --with-mx32'
- env: BUILDOPTIONS='--with-cc=gcc-5 --with-mx32'
addons:
apt:
packages:
- libc6-dev-x32
sudo: required
- gcc-multilib

# GCC for the x86-64 architecture (64-bit longs and 64-bit pointers)
- env: BUILDOPTIONS='--with-cc=gcc --with-m64 --with-valgrind'
- env: BUILDOPTIONS='--with-cc=gcc-5 --with-m64 --with-valgrind'
- env: BUILDOPTIONS='--with-cc=gcc-4.7 --with-m64 --with-valgrind'
addons:
apt:
packages:
- gcc-4.7
- env: BUILDOPTIONS='--with-cc=gcc-4.8 --with-m64 --with-valgrind'
addons:
apt:
packages:
- gcc-4.8
- env: BUILDOPTIONS='--with-cc=gcc-4.9 --with-m64 --with-valgrind'
addons:
apt:
packages:
- gcc-4.9

# clang for x86-64 architecture (64-bit longs and 64-bit pointers)
- env: BUILDOPTIONS='--with-cc=clang --with-m64 --with-valgrind'
- env: CONV_WARNINGS=1 BUILDOPTIONS='--with-cc=clang-7 --with-m64 --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang-6.0 --with-m64 --with-valgrind'
addons:
apt:
packages:
- clang-6.0
- env: BUILDOPTIONS='--with-cc=clang-5.0 --with-m64 --with-valgrind'
addons:
apt:
packages:
- clang-5.0
- env: BUILDOPTIONS='--with-cc=clang-4.0 --with-m64 --with-valgrind'
addons:
apt:
packages:
- clang-4.0

# GCC for the x86-64 architecture with restricted limb sizes
# formerly started with the option "--with-low-mp" to testme.sh
# but testing all three in one run took to long and timed out.
- env: BUILDOPTIONS='--with-cc=gcc --cflags=-DMP_8BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=gcc --cflags=-DMP_16BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=gcc --cflags=-DMP_32BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=gcc-5 --cflags=-DMP_8BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=gcc-5 --cflags=-DMP_16BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=gcc-5 --cflags=-DMP_32BIT --with-valgrind'

# clang for the x86-64 architecture with restricted limb sizes
- env: BUILDOPTIONS='--with-cc=clang --cflags=-DMP_8BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang --cflags=-DMP_16BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang --cflags=-DMP_32BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang-7 --cflags=-DMP_8BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang-7 --cflags=-DMP_16BIT --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang-7 --cflags=-DMP_32BIT --with-valgrind'

# GCC for the x86-64 architecture testing against a different Bigint-implementation
# with 333333 different inputs.
- env: BUILDOPTIONS='--with-cc=gcc --test-vs-mtest=333333 --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang --test-vs-mtest=333333 --with-valgrind'
- env: BUILDOPTIONS='--with-cc=gcc-5 --test-vs-mtest=333333 --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang-7 --test-vs-mtest=333333 --with-valgrind'

# clang for the x86-64 architecture testing against a different Bigint-implementation
# with a better random source.
- env: BUILDOPTIONS='--with-cc=gcc --test-vs-mtest=333333 --mtest-real-rand --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang --test-vs-mtest=333333 --mtest-real-rand --with-valgrind'
- env: BUILDOPTIONS='--with-cc=gcc-5 --test-vs-mtest=333333 --mtest-real-rand --with-valgrind'
- env: BUILDOPTIONS='--with-cc=clang-7 --test-vs-mtest=333333 --mtest-real-rand --with-valgrind'

# Notifications go to
# An email address is also possible.
Expand All @@ -132,5 +162,4 @@ notifications:
# seem to be the max and 20 the default if travis_wait is called without
# any options.
script:
- ./testme.sh ${BUILDOPTIONS}

- ./testme.sh ${BUILDOPTIONS}
20 changes: 10 additions & 10 deletions demo/opponent.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ int mtest_opponent(void)
FGETS(buf, 4095, stdin);
mp_read_radix(&b, buf, 64);

mp_mul_2d(&a, rr, &a);
mp_mul_2d(&a, (int)rr, &a);
a.sign = b.sign;
if (mp_cmp(&a, &b) != MP_EQ) {
printf("mul2d failed, rr == %u\n", rr);
Expand All @@ -96,7 +96,7 @@ int mtest_opponent(void)
FGETS(buf, 4095, stdin);
mp_read_radix(&b, buf, 64);

mp_div_2d(&a, rr, &a, &e);
mp_div_2d(&a, (int)rr, &a, &e);
a.sign = b.sign;
if ((a.used == b.used) && (a.used == 0)) {
a.sign = b.sign = MP_ZPOS;
Expand Down Expand Up @@ -128,10 +128,10 @@ int mtest_opponent(void)

/* test the sign/unsigned storage functions */

rr = mp_signed_bin_size(&c);
rr = (unsigned)mp_signed_bin_size(&c);
mp_to_signed_bin(&c, (unsigned char *) cmd);
memset(cmd + rr, rand() & 0xFFu, sizeof(cmd) - rr);
mp_read_signed_bin(&d, (unsigned char *) cmd, rr);
memset(cmd + rr, rand() & 0xFF, sizeof(cmd) - rr);
mp_read_signed_bin(&d, (unsigned char *) cmd, (int)rr);
if (mp_cmp(&c, &d) != MP_EQ) {
printf("mp_signed_bin failure!\n");
draw(&c);
Expand All @@ -140,10 +140,10 @@ int mtest_opponent(void)
}


rr = mp_unsigned_bin_size(&c);
rr = (unsigned)mp_unsigned_bin_size(&c);
mp_to_unsigned_bin(&c, (unsigned char *) cmd);
memset(cmd + rr, rand() & 0xFFu, sizeof(cmd) - rr);
mp_read_unsigned_bin(&d, (unsigned char *) cmd, rr);
memset(cmd + rr, rand() & 0xFF, sizeof(cmd) - rr);
mp_read_unsigned_bin(&d, (unsigned char *) cmd, (int)rr);
if (mp_cmp_mag(&c, &d) != MP_EQ) {
printf("mp_unsigned_bin failure!\n");
draw(&c);
Expand Down Expand Up @@ -343,7 +343,7 @@ int mtest_opponent(void)
sscanf(buf, "%d", &ix);
FGETS(buf, 4095, stdin);
mp_read_radix(&b, buf, 64);
mp_add_d(&a, ix, &c);
mp_add_d(&a, (mp_digit)ix, &c);
if (mp_cmp(&b, &c) != MP_EQ) {
printf("add_d %lu failure\n", add_d_n);
draw(&a);
Expand All @@ -360,7 +360,7 @@ int mtest_opponent(void)
sscanf(buf, "%d", &ix);
FGETS(buf, 4095, stdin);
mp_read_radix(&b, buf, 64);
mp_sub_d(&a, ix, &c);
mp_sub_d(&a, (mp_digit)ix, &c);
if (mp_cmp(&b, &c) != MP_EQ) {
printf("sub_d %lu failure\n", sub_d_n);
draw(&a);
Expand Down
47 changes: 24 additions & 23 deletions demo/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ static int test_mp_jacobi(void)
mp_set_int(&b, jacobi[cnt].n);
/* only test positive values of a */
for (n = -5; n <= 10; ++n) {
mp_set_int(&a, abs(n));
mp_set_int(&a, (unsigned int)abs(n));
should = MP_OKAY;
if (n < 0) {
mp_neg(&a, &a);
Expand Down Expand Up @@ -221,14 +221,14 @@ static int test_mp_complement(void)
}

for (i = 0; i < 1000; ++i) {
int l = (rand() * rand() + 1) * (rand() % 1 ? -1 : 1);
mp_set_int(&a, labs(l));
long l = (rand() * rand() + 1) * (rand() % 1 ? -1 : 1);
mp_set_long(&a, (unsigned long)labs(l));
if (l < 0)
mp_neg(&a, &a);
mp_complement(&a, &b);

l = ~l;
mp_set_int(&c, labs(l));
mp_set_long(&c, (unsigned long)labs(l));
if (l < 0)
mp_neg(&c, &c);

Expand All @@ -255,16 +255,17 @@ static int test_mp_tc_div_2d(void)
}

for (i = 0; i < 1000; ++i) {
int l, em;
long l;
int em;

l = (rand() * rand() + 1) * (rand() % 1 ? -1 : 1);
mp_set_int(&a, labs(l));
mp_set_long(&a, (unsigned long)labs(l));
if (l < 0)
mp_neg(&a, &a);

em = rand() % 32;

mp_set_int(&d, labs(l >> em));
mp_set_long(&d, (unsigned long)labs(l >> em));
if ((l >> em) < 0)
mp_neg(&d, &d);

Expand Down Expand Up @@ -296,16 +297,16 @@ static int test_mp_tc_xor(void)
int l, em;

l = (rand() * rand() + 1) * (rand() % 1 ? -1 : 1);
mp_set_int(&a, labs(l));
mp_set_int(&a, (unsigned long)labs(l));
if (l < 0)
mp_neg(&a, &a);

em = (rand() * rand() + 1) * (rand() % 1 ? -1 : 1);
mp_set_int(&b, labs(em));
mp_set_int(&b, (unsigned long)labs(em));
if (em < 0)
mp_neg(&b, &b);

mp_set_int(&d, labs(l ^ em));
mp_set_int(&d, (unsigned long)labs(l ^ em));
if ((l ^ em) < 0)
mp_neg(&d, &d);

Expand Down Expand Up @@ -334,19 +335,19 @@ static int test_mp_tc_or(void)
}

for (i = 0; i < 1000; ++i) {
int l, em;
long l, em;

l = (rand() * rand() + 1) * (rand() % 1 ? -1 : 1);
mp_set_int(&a, labs(l));
mp_set_long(&a, (unsigned long)labs(l));
if (l < 0)
mp_neg(&a, &a);

em = (rand() * rand() + 1) * (rand() % 1 ? -1 : 1);
mp_set_int(&b, labs(em));
mp_set_long(&b, (unsigned long)labs(em));
if (em < 0)
mp_neg(&b, &b);

mp_set_int(&d, labs(l | em));
mp_set_long(&d, (unsigned long)labs(l | em));
if ((l | em) < 0)
mp_neg(&d, &d);

Expand Down Expand Up @@ -374,19 +375,19 @@ static int test_mp_tc_and(void)
}

for (i = 0; i < 1000; ++i) {
int l, em;
long l, em;

l = (rand() * rand() + 1) * (rand() % 1 ? -1 : 1);
mp_set_int(&a, labs(l));
mp_set_long(&a, (unsigned long)labs(l));
if (l < 0)
mp_neg(&a, &a);

em = (rand() * rand() + 1) * (rand() % 1 ? -1 : 1);
mp_set_int(&b, labs(em));
mp_set_long(&b, (unsigned long)labs(em));
if (em < 0)
mp_neg(&b, &b);

mp_set_int(&d, labs(l & em));
mp_set_long(&d, (unsigned long)labs(l & em));
if ((l & em) < 0)
mp_neg(&d, &d);

Expand Down Expand Up @@ -554,9 +555,9 @@ static int test_mp_get_long(void)
}

for (i = 0; i < ((int)(sizeof(unsigned long)*CHAR_BIT) - 1); ++i) {
t = (1ULL << (i+1)) - 1;
t = (1UL << (i+1)) - 1;
if (!t)
t = -1;
t = ~0UL;
printf(" t = 0x%lx i = %d\r", t, i);
do {
if (mp_set_long(&a, t) != MP_OKAY) {
Expand Down Expand Up @@ -592,7 +593,7 @@ static int test_mp_get_long_long(void)
for (i = 0; i < ((int)(sizeof(unsigned long long)*CHAR_BIT) - 1); ++i) {
r = (1ULL << (i+1)) - 1;
if (!r)
r = -1;
r = ~0ULL;
printf(" r = 0x%llx i = %d\r", r, i);
do {
if (mp_set_long_long(&a, r) != MP_OKAY) {
Expand Down Expand Up @@ -1345,7 +1346,7 @@ static int test_mp_ilogb(void)
}
/* radix_size includes the memory needed for '\0', too*/
size -= 2;
if (mp_cmp_d(&lb, size) != MP_EQ) {
if (mp_cmp_d(&lb, (mp_digit)size) != MP_EQ) {
goto LBL_ERR;
}
}
Expand All @@ -1365,7 +1366,7 @@ static int test_mp_ilogb(void)
goto LBL_ERR;
}
size -= 2;
if (mp_cmp_d(&lb, size) != MP_EQ) {
if (mp_cmp_d(&lb, (mp_digit)size) != MP_EQ) {
goto LBL_ERR;
}
}
Expand Down
8 changes: 6 additions & 2 deletions makefile_include.mk
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,14 @@ CFLAGS += -I./ -Wall -Wsign-compare -Wextra -Wshadow

ifndef NO_ADDTL_WARNINGS
# additional warnings
CFLAGS += -Wsystem-headers
CFLAGS += -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align
CFLAGS += -Wstrict-prototypes -Wpointer-arith
#CFLAGS += -Wconversion -Wsign-conversion
endif

ifdef CONV_WARNINGS
CFLAGS += -Wconversion -Wsign-conversion
else
CFLAGS += -Wsystem-headers
endif

ifdef COMPILE_DEBUG
Expand Down