cryb-to/lib/mpi
Dag-Erling Smørgrav a09cdc6318 Fix equality predicates.
The count we passed to memcmp() in mpi_eq() and mpi_eq_abs() was actually the number of significant words in the MPI, rather than the number of bytes we wanted to compare.  Multiply by 4 to get the correct value.

To make the intent of the code more apparent, introduce a private MPI_MSW() macro which evaluates to the number of significant words (or 1-based index of the most significant word).  This also comes in handy in mpi_{add,sub,mul}_abs().

Add a couple of test cases which not only demonstrate the bug we fixed here but also demonstrate why we must compare whole words: on a big-endian machine, we would be comparing the unused upper bytes of the first and only word instead of the lower bytes which actually hold a value...
2017-04-22 05:32:25 +02:00
..
cryb-mpi.pc.in Start using pkg-config / pkgconf. 2017-03-07 00:54:46 +01:00
cryb_mpi.c Mechanically bump copyright dates to the date of the latest commit. 2017-02-19 20:07:43 +01:00
cryb_mpi_add.c Slightly improve function descriptions. 2017-04-06 19:51:47 +02:00
cryb_mpi_add_abs.c Fix equality predicates. 2017-04-22 05:32:25 +02:00
cryb_mpi_cmp.c Refactor the comparison predicates, check for identity first. 2017-04-06 19:51:47 +02:00
cryb_mpi_cmp_abs.c Refactor the comparison predicates, check for identity first. 2017-04-06 19:51:47 +02:00
cryb_mpi_cmp_i32.c Add functions for comparing an MPI to an integer. 2017-04-06 19:51:47 +02:00
cryb_mpi_cmp_i64.c Add functions for comparing an MPI to an integer. 2017-04-06 19:51:47 +02:00
cryb_mpi_copy.c Remove unused headers. 2017-04-06 19:51:47 +02:00
cryb_mpi_dec.c Implement fast increment / decrement functions. 2017-04-06 19:52:23 +02:00
cryb_mpi_dec_abs.c Implement fast increment / decrement functions. 2017-04-06 19:52:23 +02:00
cryb_mpi_destroy.c Remove unused headers. 2017-04-06 19:51:47 +02:00
cryb_mpi_div.c Implement MPI division. 2017-04-06 19:52:23 +02:00
cryb_mpi_div_abs.c Implement MPI division. 2017-04-06 19:52:23 +02:00
cryb_mpi_eq.c Fix equality predicates. 2017-04-22 05:32:25 +02:00
cryb_mpi_eq_abs.c Fix equality predicates. 2017-04-22 05:32:25 +02:00
cryb_mpi_eq_i32.c Add functions for comparing an MPI to an integer. 2017-04-06 19:51:47 +02:00
cryb_mpi_eq_i64.c Add functions for comparing an MPI to an integer. 2017-04-06 19:51:47 +02:00
cryb_mpi_gcd_abs.c Remove debugging code. 2017-04-06 19:51:47 +02:00
cryb_mpi_grow.c Remove unused headers. 2017-04-06 19:51:47 +02:00
cryb_mpi_impl.h Fix equality predicates. 2017-04-22 05:32:25 +02:00
cryb_mpi_inc.c Implement fast increment / decrement functions. 2017-04-06 19:52:23 +02:00
cryb_mpi_inc_abs.c Implement fast increment / decrement functions. 2017-04-06 19:52:23 +02:00
cryb_mpi_init.c Remove unused headers. 2017-04-06 19:51:47 +02:00
cryb_mpi_load.c Implement ffs() / fls() and use the latter to compute the MSB. 2017-04-06 19:52:23 +02:00
cryb_mpi_lsb.c Add functions that return the LSB and MSB of an MPI. 2017-04-06 19:51:47 +02:00
cryb_mpi_lshift.c Correct function descriptions. 2017-04-06 19:52:23 +02:00
cryb_mpi_msb.c Add functions that return the LSB and MSB of an MPI. 2017-04-06 19:51:47 +02:00
cryb_mpi_mul.c Implement MPI multiplication. 2017-04-06 19:52:23 +02:00
cryb_mpi_mul_abs.c Fix equality predicates. 2017-04-22 05:32:25 +02:00
cryb_mpi_negate.c Remove unused headers. 2017-04-06 19:51:47 +02:00
cryb_mpi_rshift.c Correct function descriptions. 2017-04-06 19:52:23 +02:00
cryb_mpi_set.c Remove unused headers. 2017-04-06 19:51:47 +02:00
cryb_mpi_sub.c Slightly improve function descriptions. 2017-04-06 19:51:47 +02:00
cryb_mpi_sub_abs.c Fix equality predicates. 2017-04-22 05:32:25 +02:00
cryb_mpi_swap.c Remove unused headers. 2017-04-06 19:51:47 +02:00
cryb_mpi_zero.c Remove unused headers. 2017-04-06 19:51:47 +02:00
Makefile.am Implement MPI division. 2017-04-06 19:52:23 +02:00
README Start of a multiple-precision integer arithmetic library. 2014-08-12 07:30:31 +00:00

Portable multiple-precision integer library.

The interface is loosely based on XySSL's MPI library.  The
implementation was written from scratch based on the algorithms
described in Menezes, van Oorschot and Vanstone: _Handbook of Applied
Cryptography_, CRC Press, 1996.  The full text of the HAC is available
for personal use at http://www.cacr.math.uwaterloo.ca/hac/.

This implementation sacrifices performance for portability and
readability, but attempts have been made to structure it in such a way
that critical portions can easily be replaced with machine-dependent
optimized versions.

The code assumes a 64-bit machine or a 32-bit machine where 64-bit
integer arithmetic is supported but not necessarily efficient; 64-bit
operations are used only to simplify overflow handling.