47 #define MP_HWBITS (MP_WBITS >> 1)
48 #define MP_WBYTES (MP_WBITS >> 3)
49 #define MP_WNIBBLES (MP_WBITS >> 2)
52 # define MP_WORDS_TO_BITS(x) ((x) << 6)
53 # define MP_WORDS_TO_NIBBLES(x) ((x) << 4)
54 # define MP_WORDS_TO_BYTES(x) ((x) << 3)
55 # define MP_BITS_TO_WORDS(x) ((x) >> 6)
56 # define MP_NIBBLES_TO_WORDS(x) ((x) >> 4)
57 # define MP_BYTES_TO_WORDS(x) ((x) >> 3)
58 #elif (MP_WBITS == 32)
59 # define MP_WORDS_TO_BITS(x) ((x) << 5)
60 # define MP_WORDS_TO_NIBBLES(x) ((x) << 3)
61 # define MP_WORDS_TO_BYTES(x) ((x) << 2)
62 # define MP_BITS_TO_WORDS(x) ((x) >> 5)
63 # define MP_NIBBLES_TO_WORDS(x) ((x) >> 3)
64 # define MP_BYTES_TO_WORDS(x) ((x) >> 2)
69 #define MP_MSBMASK (((mpw) 0x1) << (MP_WBITS-1))
70 #define MP_LSBMASK ((mpw) 0x1)
71 #define MP_ALLMASK ~((mpw) 0x0)
78 # define mpcopy(size, dst, src) memcpy(dst, src, MP_WORDS_TO_BYTES(size))
85 # define mpmove(size, dst, src) memmove(dst, src, MP_WORDS_TO_BYTES(size))
117 int mpodd (
size_t size,
const mpw* data);
127 int mpeven(
size_t size,
const mpw* data);
137 int mpz (
size_t size,
const mpw* data);
147 int mpnz (
size_t size,
const mpw* data);
159 int mpeq (
size_t size,
const mpw* xdata,
const mpw* ydata);
171 int mpne (
size_t size,
const mpw* xdata,
const mpw* ydata);
184 int mpgt (
size_t size,
const mpw* xdata,
const mpw* ydata);
197 int mplt (
size_t size,
const mpw* xdata,
const mpw* ydata);
210 int mpge (
size_t size,
const mpw* xdata,
const mpw* ydata);
223 int mple (
size_t size,
const mpw* xdata,
const mpw* ydata);
234 int mpcmp(
size_t size,
const mpw* xdata,
const mpw* ydata);
247 int mpeqx(
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw* ydata);
260 int mpnex(
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw* ydata);
274 int mpgtx(
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw* ydata);
288 int mpltx(
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw* ydata);
302 int mpgex(
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw* ydata);
316 int mplex(
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw* ydata);
327 int mpcmpx(
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw* ydata);
440 void mpand(
size_t size,
mpw* xdata,
const mpw* ydata);
450 void mpor(
size_t size,
mpw* xdata,
const mpw* ydata);
460 void mpxor(
size_t size,
mpw* xdata,
const mpw* ydata);
490 void mpsetws(
size_t size,
mpw* xdata,
size_t y);
502 void mpsetx(
size_t xsize,
mpw* xdata,
size_t ysize,
const mpw* ydata);
524 int mpadd (
size_t size,
mpw* xdata,
const mpw* ydata);
536 int mpaddx(
size_t xsize,
mpw* xdata,
size_t ysize,
const mpw* ydata);
558 int mpsub (
size_t size,
mpw* xdata,
const mpw* ydata);
570 int mpsubx(
size_t xsize,
mpw* xdata,
size_t ysize,
const mpw* ydata);
590 size_t mpsize(
size_t size,
const mpw* data);
599 size_t mpbits(
size_t size,
const mpw* data);
608 void mplshift(
size_t size,
mpw* data,
size_t count);
611 void mprshift(
size_t size,
mpw* data,
size_t count);
669 void mpmul(
mpw* result,
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw* ydata);
675 void mpsqr(
mpw* result,
size_t size,
const mpw* data);
687 void mpmod (
mpw* result,
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw*ydata,
mpw* wksp);
690 void mpndivmod(
mpw* result,
size_t xsize,
const mpw* xdata,
size_t ysize,
const mpw* ydata,
mpw* wksp);
703 void mpfprint(FILE* f,
size_t size,
const mpw* data);
713 int i2osp(
byte* osdata,
size_t ossize,
const mpw* idata,
size_t isize);
716 int os2ip(
mpw* idata,
size_t isize,
const byte* osdata,
size_t ossize);
719 int hs2ip(
mpw* idata,
size_t isize,
const char* hsdata,
size_t hssize);
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 ps...
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...
mpw mpsetmul(size_t size, mpw *result, const mpw *data, mpw y)
This function performs a multi-precision multiply-setup.
void mpxor(size_t size, mpw *xdata, const mpw *ydata)
This function computes the bit-wise XOR of two multi-precision integers. Modifies xdata...
int mpistwo(size_t size, const mpw *data)
This function tests if the value of a multi-precision integer is equal to two.
void mplshift(size_t size, mpw *data, size_t count)
void mpmul(mpw *result, size_t xsize, const mpw *xdata, size_t ysize, const mpw *ydata)
This function computes a full multi-precision product.
BeeCrypt API, portability headers.
int mpeven(size_t size, const mpw *data)
This function tests if a multi-precision integer is even.
void mpnot(size_t size, mpw *data)
This function flips all bits of a multi-precision integer.
Multi-precision integer optimization definitions.
int mpsub(size_t size, mpw *xdata, const mpw *ydata)
This function subtracts two multi-precision integers of equal size. The performed operation in pseudo...
void mpgcd_w(size_t size, const mpw *xdata, const mpw *ydata, mpw *result, mpw *wksp)
void mprshift(size_t size, mpw *data, size_t count)
void mpsetmsb(size_t size, mpw *data)
This function sets the most significant bit of a multi-precision integer.
int mpcmp(size_t size, const mpw *xdata, const mpw *ydata)
This function performs a comparison of two multi-precision integers of the same size.
int mpsubw(size_t size, mpw *xdata, mpw y)
This function subtracts one word to a multi-precision integer. The performed operation in pseudocode:...
int mplsbset(size_t size, const mpw *data)
This function tests if the leiast significant bit of a multi-precision integer is set...
void mpneg(size_t size, mpw *data)
This function negates a multi-precision integer.
size_t mprshiftlsz(size_t size, mpw *data)
#define mpmove(size, dst, src)
Definition: mp.h:85
int mpmultwo(size_t size, mpw *data)
mpw mpaddmul(size_t size, mpw *result, const mpw *data, mpw y)
This function performs a mult-precision multiply-accumulate.
int mpisone(size_t size, const mpw *data)
This functions tests if the value of a multi-precision integer is equal to one.
void mpsetws(size_t size, mpw *xdata, size_t y)
This function sets the value of a multi-precision integer to the given word. The given value is copie...
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 th...
void mpndivmod(mpw *result, size_t xsize, const mpw *xdata, size_t ysize, const mpw *ydata, mpw *wksp)
void mpfprint(FILE *f, size_t size, const mpw *data)
void mpprintln(size_t size, const mpw *data)
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 mpsqr(mpw *result, size_t size, const mpw *data)
This function computes a full multi-precision square.
uint8_t byte
Definition: api.h:72
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 pseudoco...
size_t mpbits(size_t size, const mpw *data)
This function returns the number of significant bits in a multi-precision integer.
void mpmod(mpw *result, size_t xsize, const mpw *xdata, size_t ysize, const mpw *ydata, mpw *wksp)
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.
void mpprint(size_t size, const mpw *data)
int mpz(size_t size, const mpw *data)
This function tests if a multi-precision integer is zero.
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 pseudoc...
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 s...
int mpcmpx(size_t xsize, const mpw *xdata, size_t ysize, const mpw *ydata)
This function performs a comparison of two multi-precision integers of the different size...
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 equ...
void mpaddsqrtrc(size_t size, mpw *result, const mpw *data)
This function is used in the calculation of a multi-precision squaring.
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 eq...
mpw mppndiv(mpw xhi, mpw xlo, mpw y)
size_t mplszcnt(size_t size, const mpw *data)
int hs2ip(mpw *idata, size_t isize, const char *hsdata, size_t hssize)
void mpdivtwo(size_t size, mpw *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.
#define BEECRYPTAPI
Definition: api.h:52
void mpsetlsb(size_t size, mpw *data)
This function sets the least significant bit of a multi-precision integer.
int mpodd(size_t size, const mpw *data)
This functions tests if a multi-precision integer is odd.
void mpfill(size_t size, mpw *data, mpw fill)
This function fills each word of a multi-precision integer with a given value.
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 mpextgcd_w(size_t size, const mpw *xdata, const mpw *ydata, mpw *result, mpw *wksp)
size_t mpnorm(size_t size, mpw *data)
#define mpcopy(size, dst, src)
Definition: mp.h:78
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...
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.
void mpclrmsb(size_t size, mpw *data)
This function clears the most significant bit of a multi-precision integer.
void mpzero(size_t size, mpw *data)
This function zeroes a multi-precision integer of a given size.
int i2osp(byte *osdata, size_t ossize, const mpw *idata, size_t isize)
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 ...
void mpclrlsb(size_t size, mpw *data)
This function clears the least significant bit of a multi-precision integer.
void mpfprintln(FILE *f, size_t size, const mpw *data)
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.
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 copie...
uint32_t mpw
Definition: api.h:94
int mpmsbset(size_t size, const mpw *data)
This function tests if the most significant bit of a multi-precision integer is set.
int os2ip(mpw *idata, size_t isize, const byte *osdata, size_t ossize)
int mpne(size_t size, const mpw *xdata, const mpw *ydata)
This function tests if two multi-precision integers of the same size differ.
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...
void mpand(size_t size, mpw *xdata, const mpw *ydata)
This function computes the bit-wise AND of two multi-precision integers. Modifies xdata...
int mpnz(size_t size, const mpw *data)
This function tests if a multi-precision integer is not zero.
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...
size_t mpmszcnt(size_t size, const mpw *data)
void mpsdivtwo(size_t size, mpw *data)
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 s...
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 se...