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) << 6)
#define MP_WORDS_TO_NIBBLES(x)   ((x) << 4)
#define MP_WORDS_TO_BYTES(x)   ((x) << 3)
#define MP_BITS_TO_WORDS(x)   ((x) >> 6)
#define MP_NIBBLES_TO_WORDS(x)   ((x) >> 4)
#define MP_BYTES_TO_WORDS(x)   ((x) >> 3)
#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   )     ((x) >> 6)
 

Definition at line 55 of file mp.h.

#define MP_BYTES_TO_WORDS (  x   )     ((x) >> 3)
 

Definition at line 57 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   )     ((x) >> 4)
 

Definition at line 56 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   )     ((x) << 6)
 

Definition at line 52 of file mp.h.

#define MP_WORDS_TO_BYTES (  x   )     ((x) << 3)
 

Definition at line 54 of file mp.h.

#define MP_WORDS_TO_NIBBLES (  x   )     ((x) << 4)
 

Definition at line 53 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 Fri Feb 18 01:31:25 2005 for BeeCrypt by  doxygen 1.3.9.1