Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

mp.h File Reference

Multi-precision integer routines. More...

#include "beecrypt.api.h"
#include "mpopt.h"

Go to the source code of this file.

Defines

#define MP_HWBITS   (MP_WBITS >> 1)
#define MP_WBYTES   (MP_WBITS >> 3)
#define MP_WNIBBLES   (MP_WBITS >> 2)
#define MP_WORDS_TO_BITS(x)   ((x) << 5)
#define MP_WORDS_TO_NIBBLES(x)   ((x) << 3)
#define MP_WORDS_TO_BYTES(x)   ((x) << 2)
#define MP_BITS_TO_WORDS(x)   ((x) >> 5)
#define MP_NIBBLES_TO_WORDS(x)   ((x) >> 3)
#define MP_BYTES_TO_WORDS(x)   ((x) >> 2)
#define MP_MSBMASK   (((mpw) 0x1) << (MP_WBITS-1))
#define MP_LSBMASK   ((mpw) 0x1)
#define MP_ALLMASK   ~((mpw) 0x0)
#define mpcopy(size, dst, src)   memcpy(dst, src, MP_WORDS_TO_BYTES(size))
#define mpmove(size, dst, src)   memmove(dst, src, MP_WORDS_TO_BYTES(size))

Functions

void mpzero (size_t size, mpw *data)
 This function zeroes a multi-precision integer of a given size.

void mpfill (size_t size, mpw *data, mpw fill)
 This function fills each word of a multi-precision integer with a given value.

int mpodd (size_t size, const mpw *data)
 This functions tests if a multi-precision integer is odd.

int mpeven (size_t size, const mpw *data)
 This function tests if a multi-precision integer is even.

int mpz (size_t size, const mpw *data)
 This function tests if a multi-precision integer is zero.

int mpnz (size_t size, const mpw *data)
 This function tests if a multi-precision integer is not zero.

int mpeq (size_t size, const mpw *xdata, const mpw *ydata)
 This function tests if two multi-precision integers of the same size are equal.

int mpne (size_t size, const mpw *xdata, const mpw *ydata)
 This function tests if two multi-precision integers of the same size differ.

int mpgt (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 greater than the second.

int mplt (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 the second.

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 greater than or equal to the second.

int mple (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.

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 are equal.

int mpnex (size_t xsize, const mpw *xdata, size_t ysize, const mpw *ydata)
 This function tests if two multi-precision integers of different size are equal.

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 greater than the second.

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 less than the second.

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 greater than or equal to the second.

int mplex (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.

int mpisone (size_t size, const mpw *data)
 This functions tests if the value of a multi-precision integer is equal to one.

int mpistwo (size_t size, const mpw *data)
 This function tests if the value of a multi-precision integer is equal to two.

int mpleone (size_t size, const mpw *data)
 This function tests if the value of a multi-precision integer is less than or equal to one.

int mpeqmone (size_t size, const mpw *xdata, const mpw *ydata)
 This function tests if multi-precision integer x is equal to y minus one.

int mpmsbset (size_t size, const mpw *data)
 This function tests if the most significant bit of a multi-precision integer is set.

int mplsbset (size_t size, const mpw *data)
 This function tests if the leiast significant bit of a multi-precision integer is set.

void mpsetmsb (size_t size, mpw *data)
 This function sets the most significant bit of a multi-precision integer.

void mpsetlsb (size_t size, mpw *data)
 This function sets the least significant bit of a multi-precision integer.

void mpclrmsb (size_t size, mpw *data)
 This function clears the most significant bit of a multi-precision integer.

void mpclrlsb (size_t size, mpw *data)
 This function clears the least significant bit of a multi-precision integer.

void mpand (size_t size, mpw *xdata, const mpw *ydata)
 This function computes the bit-wise AND of two multi-precision integers. Modifies xdata.

void mpor (size_t size, mpw *xdata, const mpw *ydata)
 This function computes the bit-wise OR of two multi-precision integers. Modifies xdata.

void mpxor (size_t size, mpw *xdata, const mpw *ydata)
 This function computes the bit-wise XOR of two multi-precision integers. Modifies xdata.

void mpnot (size_t size, mpw *data)
 This function flips all bits of a multi-precision integer.

void mpsetw (size_t size, mpw *xdata, mpw y)
 This function sets the value of a multi-precision integer to the given word. The given value is copied into the least significant word, while the most significant words are zeroed.

void mpsetx (size_t xsize, mpw *xdata, size_t ysize, const mpw *ydata)
 This function set the value of the first multi-precision integer to the second, truncating the most significant words if ysize > xsize, or zeroing the most significant words if ysize < xsize.

int mpaddw (size_t size, mpw *xdata, mpw y)
 This function adds one word to a multi-precision integer. The performed operation is in pseudocode: x += y.

int mpadd (size_t size, mpw *xdata, const mpw *ydata)
 This function adds two multi-precision integers of equal size. The performed operation is in pseudocode: x += y.

int mpaddx (size_t xsize, mpw *xdata, size_t ysize, const mpw *ydata)
 This function adds two multi-precision integers of different size. The performed operation in pseudocode: x += y.

int mpsubw (size_t size, mpw *xdata, mpw y)
 This function subtracts one word to a multi-precision integer. The performed operation in pseudocode: x -= y.

int mpsub (size_t size, mpw *xdata, const mpw *ydata)
 This function subtracts two multi-precision integers of equal size. The performed operation in pseudocode: x -= y.

int mpsubx (size_t xsize, mpw *xdata, size_t ysize, const mpw *ydata)
 This function subtracts two multi-precision integers of different size. The performed operation in pseudocode: x -= y.

int mpmultwo (size_t size, mpw *data)
void mpneg (size_t size, mpw *data)
 This function negates a multi-precision integer.

size_t mpsize (size_t size, const mpw *data)
 This function returns the true size of a multi-precision integer, after stripping leading zero words.

size_t mpbits (size_t size, const mpw *data)
 This function returns the number of significant bits in a multi-precision integer.

size_t mpmszcnt (size_t size, const mpw *data)
size_t mplszcnt (size_t size, const mpw *data)
void mplshift (size_t size, mpw *data, size_t count)
void mprshift (size_t size, mpw *data, size_t count)
size_t mprshiftlsz (size_t size, mpw *data)
size_t mpnorm (size_t size, mpw *data)
void mpdivtwo (size_t size, mpw *data)
void mpsdivtwo (size_t size, mpw *data)
mpw mpsetmul (size_t size, mpw *result, const mpw *data, mpw y)
 This function performs a multi-precision multiply-setup.

mpw mpaddmul (size_t size, mpw *result, const mpw *data, mpw y)
 This function performs a mult-precision multiply-accumulate.

void mpaddsqrtrc (size_t size, mpw *result, const mpw *data)
 This function is used in the calculation of a multi-precision squaring.

void mpmul (mpw *result, size_t xsize, const mpw *xdata, size_t ysize, const mpw *ydata)
 This function computes a full multi-precision product.

void mpsqr (mpw *result, size_t size, const mpw *data)
 This function computes a full multi-precision square.

void mpgcd_w (size_t size, const mpw *xdata, const mpw *ydata, mpw *result, mpw *wksp)
int mpextgcd_w (size_t size, const mpw *xdata, const mpw *ydata, mpw *result, mpw *wksp)
mpw mppndiv (mpw xhi, mpw xlo, mpw y)
void mpmod (mpw *result, size_t xsize, const mpw *xdata, size_t ysize, const mpw *ydata, mpw *wksp)
void mpndivmod (mpw *result, size_t xsize, const mpw *xdata, size_t ysize, const mpw *ydata, mpw *wksp)
void mpprint (size_t size, const mpw *data)
void mpprintln (size_t size, const mpw *data)
void mpfprint (FILE *f, size_t size, const mpw *data)
void mpfprintln (FILE *f, size_t size, const mpw *data)
int os2ip (mpw *idata, size_t isize, const byte *osdata, size_t ossize)
int i2osp (byte *osdata, size_t ossize, const mpw *idata, size_t isize)
int hs2ip (mpw *idata, size_t isize, const char *hsdata, size_t hssize)


Detailed Description

Multi-precision integer routines.

The routines declared here are all low-level operations, most of them suitable to be implemented in assembler. Prime candidates are in order of importance (according to gprof):

With some smart use of available assembler instructions, it's possible to speed these routines up by a factor of 2 to 4.

Author:
Bob Deblier <bob.deblier@pandora.be>

Definition in file mp.h.


Define Documentation

#define MP_ALLMASK   ~((mpw) 0x0)
 

Definition at line 71 of file mp.h.

#define MP_BITS_TO_WORDS  )     ((x) >> 5)
 

Definition at line 62 of file mp.h.

#define MP_BYTES_TO_WORDS  )     ((x) >> 2)
 

Definition at line 64 of file mp.h.

#define MP_HWBITS   (MP_WBITS >> 1)
 

Definition at line 47 of file mp.h.

#define MP_LSBMASK   ((mpw) 0x1)
 

Definition at line 70 of file mp.h.

#define MP_MSBMASK   (((mpw) 0x1) << (MP_WBITS-1))
 

Definition at line 69 of file mp.h.

#define MP_NIBBLES_TO_WORDS  )     ((x) >> 3)
 

Definition at line 63 of file mp.h.

#define MP_WBYTES   (MP_WBITS >> 3)
 

Definition at line 48 of file mp.h.

#define MP_WNIBBLES   (MP_WBITS >> 2)
 

Definition at line 49 of file mp.h.

#define MP_WORDS_TO_BITS  )     ((x) << 5)
 

Definition at line 59 of file mp.h.

#define MP_WORDS_TO_BYTES  )     ((x) << 2)
 

Definition at line 61 of file mp.h.

#define MP_WORDS_TO_NIBBLES  )     ((x) << 3)
 

Definition at line 60 of file mp.h.

#define mpcopy size,
dst,
src   )     memcpy(dst, src, MP_WORDS_TO_BYTES(size))
 

Definition at line 78 of file mp.h.

#define mpmove size,
dst,
src   )     memmove(dst, src, MP_WORDS_TO_BYTES(size))
 

Definition at line 85 of file mp.h.


Function Documentation

int hs2ip mpw idata,
size_t  isize,
const char *  hsdata,
size_t  hssize
 

int i2osp byte osdata,
size_t  ossize,
const mpw idata,
size_t  isize
 

int mpadd size_t  size,
mpw xdata,
const mpw ydata
 

This function adds two multi-precision integers of equal size. The performed operation is in pseudocode: x += y.

Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
ydata The second multi-precision integer.
Returns:
The carry-over value of the operation; this value is either 0 or 1.

mpw mpaddmul size_t  size,
mpw result,
const mpw data,
mpw  y
 

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.

Parameters:
size The size of multi-precision integer multiplier.
result The place where result will be accumulated.
data The multi-precision integer multiplier.
y The multiplicand.
Return values:
The carry-over multi-precision word.

void mpaddsqrtrc size_t  size,
mpw result,
const mpw data
 

This function is used in the calculation of a multi-precision squaring.

int mpaddw size_t  size,
mpw xdata,
mpw  y
 

This function adds one word to a multi-precision integer. The performed operation is in pseudocode: x += y.

Parameters:
size The size of the multi-precision integer.
xdata The first multi-precision integer.
y The multi-precision word.
Returns:
The carry-over value of the operation; this value is either 0 or 1.

int mpaddx size_t  xsize,
mpw xdata,
size_t  ysize,
const mpw ydata
 

This function adds two multi-precision integers of different size. The performed operation in pseudocode: x += y.

Parameters:
xsize The size of the first multi-precision integer.
xdata The first multi-precision integer.
ysize The size of the second multi-precision integer.
ydata The second multi-precision integer.
Returns:
The carry-over value of the operation; this value is either 0 or 1.

mpand size_t  size,
mpw xdata,
const mpw ydata
 

This function computes the bit-wise AND of two multi-precision integers. Modifies xdata.

Parameters:
size The size of the multi-precision integers.
xdata The multi-precision integer data.
ydata The multi-precision integer data.

size_t mpbits size_t  size,
const mpw data
 

This function returns the number of significant bits in a multi-precision integer.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.

void mpclrlsb size_t  size,
mpw data
 

This function clears the least significant bit of a multi-precision integer.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.

void mpclrmsb size_t  size,
mpw data
 

This function clears the most significant bit of a multi-precision integer.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.

void mpdivtwo size_t  size,
mpw data
 

int mpeq size_t  size,
const mpw xdata,
const mpw ydata
 

This function tests if two multi-precision integers of the same size are equal.

Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if equal
0 if not equal

int mpeqmone size_t  size,
const mpw xdata,
const mpw ydata
 

This function tests if multi-precision integer x is equal to y minus one.

Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if less than or equal to one.
0 if greater than one.

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 are equal.

Parameters:
xsize The size of the first multi-precision integer.
xdata The first multi-precision integer.
ysize The size of the first multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if equal
0 if not equal

int mpeven size_t  size,
const mpw data
 

This function tests if a multi-precision integer is even.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
Return values:
1 if even
0 if odd

int mpextgcd_w size_t  size,
const mpw xdata,
const mpw ydata,
mpw result,
mpw wksp
 

void mpfill size_t  size,
mpw data,
mpw  fill
 

This function fills each word of a multi-precision integer with a given value.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
fill The value fill the data with.

void mpfprint FILE *  f,
size_t  size,
const mpw data
 

void mpfprintln FILE *  f,
size_t  size,
const mpw data
 

void mpgcd_w size_t  size,
const mpw xdata,
const mpw ydata,
mpw result,
mpw wksp
 

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 greater than or equal to the second.

Note:
The comparison treats the arguments as unsigned.
Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if greater or equal
0 if less

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 greater than or equal to the second.

Note:
The comparison treats the arguments as unsigned.
Parameters:
xsize The size of the first multi-precision integer.
xdata The first multi-precision integer.
ysize The size of the second multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if greater or equal
0 if less

int mpgt 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 greater than the second.

Note:
The comparison treats the arguments as unsigned.
Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if greater
0 if less or equal

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 greater than the second.

Note:
The comparison treats the arguments as unsigned.
Parameters:
xsize The size of the first multi-precision integer.
xdata The first multi-precision integer.
ysize The size of the second multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if greater
0 if less or equal

int mpisone size_t  size,
const mpw data
 

This functions tests if the value of a multi-precision integer is equal to one.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
Return values:
1 if one
0 if not one

int mpistwo size_t  size,
const mpw data
 

This function tests if the value of a multi-precision integer is equal to two.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
Return values:
1 if two
0 if not two

int mple 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.
Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if less or equal
0 if greater

int mpleone size_t  size,
const mpw data
 

This function tests if the value of a multi-precision integer is less than or equal to one.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
Return values:
1 if less than or equal to one.
0 if greater than one.

int mplex 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.
Parameters:
xsize The size of the first multi-precision integer.
xdata The first multi-precision integer.
ysize The size of the second multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if less or equal
0 if greater

int mplsbset size_t  size,
const mpw data
 

This function tests if the leiast significant bit of a multi-precision integer is set.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
Return values:
1 if set
0 if not set

void mplshift size_t  size,
mpw data,
size_t  count
 

size_t mplszcnt size_t  size,
const mpw data
 

int mplt 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 the second.

Note:
The comparison treats the arguments as unsigned.
Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if less
0 if greater or equal

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 less than the second.

Note:
The comparison treats the arguments as unsigned.
Parameters:
xsize The size of the first multi-precision integer.
xdata The first multi-precision integer.
ysize The size of the second multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if less
0 if greater or equal

void mpmod mpw result,
size_t  xsize,
const mpw xdata,
size_t  ysize,
const mpw ydata,
mpw wksp
 

int mpmsbset size_t  size,
const mpw data
 

This function tests if the most significant bit of a multi-precision integer is set.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
Return values:
1 if set
0 if not set

size_t mpmszcnt size_t  size,
const mpw data
 

void mpmul mpw result,
size_t  xsize,
const mpw xdata,
size_t  ysize,
const mpw ydata
 

This function computes a full multi-precision product.

int mpmultwo size_t  size,
mpw data
 

void mpndivmod mpw result,
size_t  xsize,
const mpw xdata,
size_t  ysize,
const mpw ydata,
mpw wksp
 

int mpne size_t  size,
const mpw xdata,
const mpw ydata
 

This function tests if two multi-precision integers of the same size differ.

Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if not equal
0 if equal

void mpneg size_t  size,
mpw data
 

This function negates a multi-precision integer.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.

int mpnex size_t  xsize,
const mpw xdata,
size_t  ysize,
const mpw ydata
 

This function tests if two multi-precision integers of different size are equal.

Parameters:
xsize The size of the first multi-precision integer.
xdata The first multi-precision integer.
ysize The size of the first multi-precision integer.
ydata The second multi-precision integer.
Return values:
1 if equal
0 if not equal

size_t mpnorm size_t  size,
mpw data
 

mpnot size_t  size,
mpw data
 

This function flips all bits of a multi-precision integer.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.

int mpnz size_t  size,
const mpw data
 

This function tests if a multi-precision integer is not zero.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
Return values:
1 if not zero
0 if zero

int mpodd size_t  size,
const mpw data
 

This functions tests if a multi-precision integer is odd.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
Return values:
1 if odd
0 if even

void mpor size_t  size,
mpw xdata,
const mpw ydata
 

This function computes the bit-wise OR of two multi-precision integers. Modifies xdata.

Parameters:
size The size of the multi-precision integer.
xdata The multi-precision integer data.
ydata The multi-precision integer data.

mpw mppndiv mpw  xhi,
mpw  xlo,
mpw  y
 

void mpprint size_t  size,
const mpw data
 

void mpprintln size_t  size,
const mpw data
 

void mprshift size_t  size,
mpw data,
size_t  count
 

size_t mprshiftlsz size_t  size,
mpw data
 

void mpsdivtwo size_t  size,
mpw data
 

void mpsetlsb size_t  size,
mpw data
 

This function sets the least significant bit of a multi-precision integer.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.

void mpsetmsb size_t  size,
mpw data
 

This function sets the most significant bit of a multi-precision integer.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.

mpw mpsetmul size_t  size,
mpw result,
const mpw data,
mpw  y
 

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.

Parameters:
size The size of multi-precision integer multiplier.
result The place where result will be accumulated.
data The multi-precision integer multiplier.
y The multiplicand.
Returns:
The carry-over multi-precision word.

void mpsetw size_t  size,
mpw xdata,
mpw  y
 

This function sets the value of a multi-precision integer to the given word. The given value is copied into the least significant word, while the most significant words are zeroed.

Parameters:
size The size of the multi-precision integer.
xdata The first multi-precision integer.
y The multi-precision word.

void mpsetx size_t  xsize,
mpw xdata,
size_t  ysize,
const mpw ydata
 

This function set the value of the first multi-precision integer to the second, truncating the most significant words if ysize > xsize, or zeroing the most significant words if ysize < xsize.

Parameters:
xsize The size of the first multi-precision integer.
xdata The first multi-precision integer.
ysize The size of the second multi-precision integer.
ydata The second multi-precision integer.

size_t mpsize size_t  size,
const mpw data
 

This function returns the true size of a multi-precision integer, after stripping leading zero words.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.

void mpsqr mpw result,
size_t  size,
const mpw data
 

This function computes a full multi-precision square.

int mpsub size_t  size,
mpw xdata,
const mpw ydata
 

This function subtracts two multi-precision integers of equal size. The performed operation in pseudocode: x -= y.

Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
ydata The second multi-precision integer.
Returns:
The carry-over value of the operation; this value is either 0 or 1.

int mpsubw size_t  size,
mpw xdata,
mpw  y
 

This function subtracts one word to a multi-precision integer. The performed operation in pseudocode: x -= y.

Parameters:
size The size of the multi-precision integers.
xdata The first multi-precision integer.
y The multi-precision word.
Returns:
The carry-over value of the operation; this value is either 0 or 1.

int mpsubx size_t  xsize,
mpw xdata,
size_t  ysize,
const mpw ydata
 

This function subtracts two multi-precision integers of different size. The performed operation in pseudocode: x -= y.

Parameters:
xsize The size of the first multi-precision integer.
xdata The first multi-precision integer.
ysize The size of the second multi-precision integer.
ydata The second multi-precision integer.
Returns:
The carry-over value of the operation; this value is either 0 or 1.

void mpxor size_t  size,
mpw xdata,
const mpw ydata
 

This function computes the bit-wise XOR of two multi-precision integers. Modifies xdata.

Parameters:
size The size of the multi-precision integer.
xdata The multi-precision integer data.
ydata The multi-precision integer data.

int mpz size_t  size,
const mpw data
 

This function tests if a multi-precision integer is zero.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.
Return values:
1 if zero
0 if not zero

void mpzero size_t  size,
mpw data
 

This function zeroes a multi-precision integer of a given size.

Parameters:
size The size of the multi-precision integer.
data The multi-precision integer data.

int os2ip mpw idata,
size_t  isize,
const byte osdata,
size_t  ossize
 


Generated on Wed Mar 24 13:56:54 2004 for BeeCrypt by doxygen 1.3.6