Fork of tomsfastmath
Go to file
Giovanni Bajo 50f587c36f Bugfix: clear the exceeding destination digits.
Currently, the fp_sqr_comba_* functions do not fully clear the destination
number, but only overwrites the digits they care about. Eg: if
you call a comba4, it will overwrite the first 8 digits and leave
the others unchanged.

On the other hand, fp_mul_comba_* functions do *not* check incoming
unused digits (relying on the guarantee that they must be zero),
so they will happily compute the wrong result if those digits
are not empty. Testcase for a 32-bit system:

   char buf[64];
   fp_int num, num2, d;

   memset(buf, 0xFF, sizeof(buf);
   fp_read_unsigned_bin(&num, buf);
   fp_set(&d, 1);

   fp_sqr_comba_3(&d, &num);
   // now num is { 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,
   //              0xFFFFFFFF, 0xFFFFFFFF ... }
   // only first 6 digits have been written, but even
   // if num.used is correctly set to 6, this can trigger
   // bugs.

   // Create a number larger than 6 digits
   fp_2expt(&num2, 8*32+4);

   fp_mul_comba_8(&num, &num2, &num2);
   // wrong result has been computed, because the first 8
   // digits of num have been read and multiplied
   // even if num->used == 6, relying on the fact that
   // they should be zero.
2011-09-20 11:02:53 +02:00
demo added testcase of problem reported by martins.mozeiko@gmail.com 2011-03-27 19:34:36 +02:00
doc added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
mtest added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
pre_gen added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
random_txt_files added tomsfastmath-0.03 2010-07-22 10:06:23 +02:00
src Bugfix: clear the exceeding destination digits. 2011-09-20 11:02:53 +02:00
.gitignore added gitignore 2011-03-27 19:33:13 +02:00
changes.txt added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
filter.pl added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
gen.pl added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
genlist.sh added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
LICENSE after multiple objections of libtom users [1], we decided to change licensing 2011-01-19 10:28:48 +01:00
makefile added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
makefile.shared added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
mess.sh added tomsfastmath-0.04 2010-07-22 10:06:24 +02:00
parsenames.pl added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
SPONSORS added tomsfastmath-0.01 2010-07-22 10:06:21 +02:00
tfm.tex added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00
TODO added tomsfastmath-0.10 2010-07-22 10:06:29 +02:00
updatemakes.sh added tomsfastmath-0.12 2010-07-22 10:06:30 +02:00