#endif
/**
+ * This function zeroes a multi-precision integer of a given size.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
*/
BEECRYPTAPI
void mpzero(size_t size, /*@out@*/ mpw* data)
/*@modifies data @*/;
/**
+ * This function fills each word of a multi-precision integer with a
+ * given value.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @param fill The value fill the data with.
*/
BEECRYPTAPI /*@unused@*/
void mpfill(size_t size, /*@out@*/ mpw* data, mpw fill)
/*@modifies data @*/;
/**
+ * This function tests if a multi-precision integer is odd.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @return 1 if odd, 0 if even
*/
BEECRYPTAPI
int mpodd (size_t size, const mpw* data)
/*@*/;
/**
+ * This function tests if a multi-precision integer is even.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @return 1 if even, 0 if odd
*/
BEECRYPTAPI
int mpeven(size_t size, const mpw* data)
/*@*/;
/**
+ * This function tests if a multi-precision integer is zero.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @return 1 if zero, 0 if not zero
*/
BEECRYPTAPI
int mpz (size_t size, const mpw* data)
/*@*/;
/**
+ * This function tests if a multi-precision integer is not zero.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @return 1 if not zero, 0 if zero
*/
/*@-exportlocal@*/
BEECRYPTAPI
/*@=exportlocal@*/
/**
+ * This function tests if two multi-precision integers of the same size
+ * are equal.
+ * @param size The size of the multi-precision integers.
+ * @param xdata The first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if equal, 0 if not equal
*/
BEECRYPTAPI
int mpeq (size_t size, const mpw* xdata, const mpw* ydata)
/*@*/;
/**
+ * This function tests if two multi-precision integers of the same size
+ * differ.
+ * @param size The size of the multi-precision integers.
+ * @param xdata The first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if not equal, 0 if equal
*/
/*@-exportlocal@*/
BEECRYPTAPI
/*@=exportlocal@*/
/**
+ * This function tests if the first of two multi-precision integers
+ * of the same size is greater than the second.
+ * @note The comparison treats the arguments as unsigned.
+ * @param size The size of the multi-precision integers.
+ * @param xdata The first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if greater, 0 if less or equal
*/
/*@-exportlocal@*/
BEECRYPTAPI
/*@=exportlocal@*/
/**
+ * This function tests if the first of two multi-precision integers
+ * of the same size is less than the second.
+ * @note The comparison treats the arguments as unsigned.
+ * @param size The size of the multi-precision integers.
+ * @param xdata The first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if less, 0 if greater or equal
*/
/*@-exportlocal@*/
BEECRYPTAPI
/*@=exportlocal@*/
/**
+ * This function tests if the first of two multi-precision integers
+ * of the same size is greater than or equal to the second.
+ * @note The comparison treats the arguments as unsigned.
+ * @param size The size of the multi-precision integers.
+ * @param xdata The first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if greater or equal, 0 if less
*/
BEECRYPTAPI
int mpge (size_t size, const mpw* xdata, const mpw* ydata)
/*@*/;
/**
+ * This function tests if the first of two multi-precision integers
+ * of the same size is less than or equal to the second.
+ * @note The comparison treats the arguments as unsigned.
+ * @param size The size of the multi-precision integers.
+ * @param xdata The first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if less or equal, 0 if greater
*/
BEECRYPTAPI
int mple (size_t size, const mpw* xdata, const mpw* ydata)
/*@*/;
/**
+ * This function tests if two multi-precision integers of different
+ * size are equal.
+ * @param xsize The size of the first multi-precision integer.
+ * @param xdata The first multi-precision integer.
+ * @param ysize The size of the first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if equal, 0 if not equal
*/
BEECRYPTAPI
int mpeqx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
/*@*/;
/**
+ * This function tests if two multi-precision integers of different
+ * size differ.
+ * @param xsize The size of the first multi-precision integer.
+ * @param xdata The first multi-precision integer.
+ * @param ysize The size of the first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if not equal, 0 if equal
*/
BEECRYPTAPI /*@unused@*/
int mpnex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
/*@*/;
/**
+ * This function tests if the first of two multi-precision integers
+ * of different size is greater than the second.
+ * @note The comparison treats the arguments as unsigned.
+ * @param xsize The size of the first multi-precision integer.
+ * @param xdata The first multi-precision integer.
+ * @param ysize The size of the second multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if greater, 0 if less or equal
*/
BEECRYPTAPI /*@unused@*/
int mpgtx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
/*@*/;
/**
+ * This function tests if the first of two multi-precision integers
+ * of different size is less than the second.
+ * @note The comparison treats the arguments as unsigned.
+ * @param xsize The size of the first multi-precision integer.
+ * @param xdata The first multi-precision integer.
+ * @param ysize The size of the second multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if less, 0 if greater or equal
*/
BEECRYPTAPI /*@unused@*/
int mpltx(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
/*@*/;
/**
+ * This function tests if the first of two multi-precision integers
+ * of different size is greater than or equal to the second.
+ * @note The comparison treats the arguments as unsigned.
+ * @param xsize The size of the first multi-precision integer.
+ * @param xdata The first multi-precision integer.
+ * @param ysize The size of the second multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if greater or equal, 0 if less
*/
BEECRYPTAPI
int mpgex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
/*@*/;
/**
+ * This function tests if the first of two multi-precision integers
+ * of different size is less than or equal to the second.
+ * @note The comparison treats the arguments as unsigned.
+ * @param xsize The size of the first multi-precision integer.
+ * @param xdata The first multi-precision integer.
+ * @param ysize The size of the second multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if less or equal, 0 if greater
*/
BEECRYPTAPI
int mplex(size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
/*@*/;
/**
+ * This function tests if the value of a multi-precision integer is
+ * equal to one.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @return 1 if equal to one, 0 otherwise.
*/
BEECRYPTAPI
int mpisone(size_t size, const mpw* data)
/*@*/;
/**
+ * This function tests if the value of a multi-precision integer is
+ * equal to two.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @return 1 if equal to two, 0 otherwise.
*/
BEECRYPTAPI
int mpistwo(size_t size, const mpw* data)
/*@*/;
/**
+ * This function tests if the value of a multi-precision integer is
+ * less than or equal to one.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @return 1 if less than or equal to one, 0 otherwise.
*/
BEECRYPTAPI
int mpleone(size_t size, const mpw* data)
/*@*/;
/**
+ * This function tests if multi-precision integer x is equal to y minus one.
+ * @param size The size of the multi-precision integers.
+ * @param xdata The first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return 1 if less than or equal to (y-1), 0 otherwise.
*/
BEECRYPTAPI /*@unused@*/
int mpeqmone(size_t size, const mpw* xdata, const mpw* ydata)
/*@*/;
/**
+ * This function tests the most significant bit of a multi-precision integer.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @return 1 if set, 0 if not set
*/
BEECRYPTAPI
int mpmsbset(size_t size, const mpw* data)
/*@*/;
/**
+ * This function tests the least significant bit of a multi-precision integer.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
+ * @return 1 if set, 0 if not set
*/
BEECRYPTAPI /*@unused@*/
int mplsbset(size_t size, const mpw* data)
/*@*/;
/**
+ * This function sets the most significant bit of a multi-precision integer.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
*/
BEECRYPTAPI /*@unused@*/
void mpsetmsb(size_t size, mpw* data)
/*@modifies data @*/;
/**
+ * This function sets the least significant bit of a multi-precision integer.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
*/
BEECRYPTAPI
void mpsetlsb(size_t size, mpw* data)
/*@modifies data @*/;
/**
+ * This function clears the most significant bit of a multi-precision integer.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
*/
BEECRYPTAPI /*@unused@*/
void mpclrmsb(size_t size, mpw* data)
/*@modifies data @*/;
/**
+ * This function clears the least significant bit of a multi-precision integer.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
*/
BEECRYPTAPI /*@unused@*/
void mpclrlsb(size_t size, mpw* data)
/*@modifies xdata @*/;
/**
+ * This function flips all bits of a multi-precision integer.
+ * @param size The size of the multi-precision integer.
+ * @param data The multi-precision integer data.
*/
/*@-exportlocal@*/
BEECRYPTAPI
/*@modifies xdata @*/;
/**
+ * This function adds two multi-precision integers of equal size.
+ * The performed operation is in pseudocode: x += y
+ * @param size The size of the multi-precision integers.
+ * @param xdata The first multi-precision integer.
+ * @param ydata The second multi-precision integer.
+ * @return The carry-over value of the operation (either 0 or 1).
*/
BEECRYPTAPI
int mpadd (size_t size, mpw* xdata, const mpw* ydata)
/*@modifies data @*/;
/**
+ * This function performs a multi-precision multiply-setup.
+ *
+ * This function is used in the computation of a full multi-precision
+ * multiplication. By using it we can shave off a few cycles; otherwise we'd
+ * have to zero the least significant half of the result first and use
+ * another call to the slightly slower mpaddmul function.
+ *
+ * @param size The size of multi-precision integer multiplier.
+ * @param result The place where result will be accumulated.
+ * @param data The multi-precision integer multiplier.
+ * @param y The multiplicand.
+ * @return The carry-over multi-precision word.
*/
BEECRYPTAPI
mpw mpsetmul (size_t size, /*@out@*/ mpw* result, const mpw* data, mpw y)
/*@modifies result @*/;
/**
+ * This function performs a mult-precision multiply-accumulate.
+ *
+ * This function is used in the computation of a full multi-precision
+ * multiplication. It computes the product-by-one-word and accumulates it with
+ * the previous result.
+ *
+ * @param size The size of multi-precision integer multiplier.
+ * @param result The place where result will be accumulated.
+ * @param data The multi-precision integer multiplier.
+ * @param y The multiplicand.
+ * @return The carry-over multi-precision word.
*/
BEECRYPTAPI
mpw mpaddmul (size_t size, /*@out@*/ mpw* result, const mpw* data, mpw y)
/*@modifies result @*/;
/**
+ * This function is used in the calculation of a multi-precision
+ * squaring.
*/
/*@-exportlocal@*/
BEECRYPTAPI
-mpw mpaddsqrtrc(size_t size, /*@out@*/ mpw* result, const mpw* data)
+void mpaddsqrtrc(size_t size, /*@out@*/ mpw* result, const mpw* data)
/*@modifies result @*/;
/*@=exportlocal@*/
/**
+ * This function computes a full multi-precision product.
*/
BEECRYPTAPI
void mpmul(/*@out@*/ mpw* result, size_t xsize, const mpw* xdata, size_t ysize, const mpw* ydata)
/*@modifies result @*/;
/**
+ * This function computes a full multi-precision square.
*/
BEECRYPTAPI
void mpsqr(/*@out@*/ mpw* result, size_t size, const mpw* data)