\hypertarget{mp_8h}{ \section{include/beecrypt/mp.h File Reference} \label{mp_8h}\index{include/beecrypt/mp.h@{include/beecrypt/mp.h}} } Multi-\/precision integer routines. {\ttfamily \#include \char`\"{}beecrypt/api.h\char`\"{}}\par {\ttfamily \#include \char`\"{}beecrypt/mpopt.h\char`\"{}}\par Include dependency graph for mp.h: \nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=268pt]{mp_8h__incl} \end{center} \end{figure} \subsection*{Defines} \begin{DoxyCompactItemize} \item \#define \hyperlink{mp_8h_a3317414bc77cc27f0c50d300fc93db7e}{MP\_\-HWBITS}~(MP\_\-WBITS $>$$>$ 1) \item \#define \hyperlink{mp_8h_ac32fb614379620608d1c733a79132cfa}{MP\_\-WBYTES}~(MP\_\-WBITS $>$$>$ 3) \item \#define \hyperlink{mp_8h_a3650f0cbb0aaa7100a4a7fba476920bf}{MP\_\-WNIBBLES}~(MP\_\-WBITS $>$$>$ 2) \item \#define \hyperlink{mp_8h_a7a243883fb94433b237da964799fabcd}{MP\_\-WORDS\_\-TO\_\-BITS}(x)~((x) $<$$<$ 5) \item \#define \hyperlink{mp_8h_ab77b2dd70af10d0705b6048dc732a4dc}{MP\_\-WORDS\_\-TO\_\-NIBBLES}(x)~((x) $<$$<$ 3) \item \#define \hyperlink{mp_8h_a337d99143ec5b28671099a5ea022f3b9}{MP\_\-WORDS\_\-TO\_\-BYTES}(x)~((x) $<$$<$ 2) \item \#define \hyperlink{mp_8h_ad05de288398b539cf645bec59d9f27e8}{MP\_\-BITS\_\-TO\_\-WORDS}(x)~((x) $>$$>$ 5) \item \#define \hyperlink{mp_8h_a65dc4dd0b6906f36f66e42a55097b8b1}{MP\_\-NIBBLES\_\-TO\_\-WORDS}(x)~((x) $>$$>$ 3) \item \#define \hyperlink{mp_8h_a9b78d45cecc26f578dc32c4ae2c803dd}{MP\_\-BYTES\_\-TO\_\-WORDS}(x)~((x) $>$$>$ 2) \item \#define \hyperlink{mp_8h_a696235b870f5868d66258cbfc903affa}{MP\_\-MSBMASK}~(((\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw}) 0x1) $<$$<$ (MP\_\-WBITS-\/1)) \item \#define \hyperlink{mp_8h_a137aeb18139f4f7c871639eb67ecf7b9}{MP\_\-LSBMASK}~((\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw}) 0x1) \item \#define \hyperlink{mp_8h_af5466aa801f08b6c63e02f54cfc7106b}{MP\_\-ALLMASK}~$\sim$((\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw}) 0x0) \item \#define \hyperlink{mp_8h_afb750ee5bfe6cdd5a0ed87dccf981d80}{mpcopy}(size, dst, src)~memcpy(dst, src, MP\_\-WORDS\_\-TO\_\-BYTES(size)) \item \#define \hyperlink{mp_8h_abddd3139e57f9db0c67a896024bc9684}{mpmove}(size, dst, src)~memmove(dst, src, MP\_\-WORDS\_\-TO\_\-BYTES(size)) \end{DoxyCompactItemize} \subsection*{Functions} \begin{DoxyCompactItemize} \item void \hyperlink{mp_8h_ae9fd060d4b6ce84404107a1523f34276}{mpzero} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function zeroes a multi-\/precision integer of a given size. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_a1624fb65f4a9cac6f6246d64bb0189ea}{mpfill} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} fill) \begin{DoxyCompactList}\small\item\em This function fills each word of a multi-\/precision integer with a given value. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a70c9ff9c0f765307214fb28d22cc2c23}{mpodd} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This functions tests if a multi-\/precision integer is odd. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ab0520c67c603a7e32c9eeb6a39a02595}{mpeven} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function tests if a multi-\/precision integer is even. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_aa849fd262347ab62ea3b1bf4afbf7c7c}{mpz} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function tests if a multi-\/precision integer is zero. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ade7306885f5508bc52954f6be8820558}{mpnz} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function tests if a multi-\/precision integer is not zero. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ae801d1996190439b2cf80548f6a03a31}{mpeq} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if two multi-\/precision integers of the same size are equal. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ae661ccc4c37b796f4671f882e71c9cc4}{mpne} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if two multi-\/precision integers of the same size differ. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ae4905ad4ef2bb6b7e8a2aa79460041c6}{mpgt} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if the first of two multi-\/precision integers of the same size is greater than the second. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_af4e3a7316789993b73b2289bf34c837b}{mplt} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if the first of two multi-\/precision integers of the same size is less than the second. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ae01843e52c6a0b0c28c345d8040670dc}{mpge} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if the first of two multi-\/precision integers of the same size is greater than or equal to the second. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_af987c3b7b75fc0eae1f97aab58888006}{mple} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if the first of two multi-\/precision integers of the same size is less than or equal to the second. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_acc8c19971240f6ea22f6b81c1db3553b}{mpcmp} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function performs a comparison of two multi-\/precision integers of the same size. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_af51c09b612e8033399cff6febdb9b505}{mpeqx} (size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if two multi-\/precision integers of different size are equal. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_abecba2b8f414da05ee7c9959ac72acb1}{mpnex} (size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if two multi-\/precision integers of different size are equal. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ae2a7b28715b9a820ceda11b77d901953}{mpgtx} (size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if the first of two multi-\/precision integers of different size is greater than the second. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a2d772e5778ec336da5a56302f21786a0}{mpltx} (size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if the first of two multi-\/precision integers of different size is less than the second. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a01b1186616ddfd912772cddce1fc292b}{mpgex} (size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if the first of two multi-\/precision integers of different size is greater than or equal to the second. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_adbd7f836f9246cf904207315c346a56c}{mplex} (size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if the first of two multi-\/precision integers of different size is less than or equal to the second. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ac0b786d9f5d016b2d0d06b22d6f89862}{mpcmpx} (size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function performs a comparison of two multi-\/precision integers of the different size. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ae9ab3d1ce03ffda281d610fd8123b06e}{mpisone} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This functions tests if the value of a multi-\/precision integer is equal to one. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a0605a0ef9815dce0cf2743aafdac03e6}{mpistwo} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function tests if the value of a multi-\/precision integer is equal to two. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_af1f8a61b04fe27911d51aec0c6468238}{mpleone} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function tests if the value of a multi-\/precision integer is less than or equal to one. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a75df6af46d913aad6f591583683d04e7}{mpeqmone} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function tests if multi-\/precision integer x is equal to y minus one. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a12d85e63b1d9f4d68909c51890ef0738}{mpmsbset} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function tests if the most significant bit of a multi-\/precision integer is set. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a84c1045a3fe0074b8b954679bcee62de}{mplsbset} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function tests if the leiast significant bit of a multi-\/precision integer is set. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_ab3a5821696b1b13a84d6648332ba6cf7}{mpsetmsb} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function sets the most significant bit of a multi-\/precision integer. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_ac4ccde3ff8c2aac9e324fb0832e28e1a}{mpsetlsb} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function sets the least significant bit of a multi-\/precision integer. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_a298b2af39ad306efab02829d83d86b4b}{mpclrmsb} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function clears the most significant bit of a multi-\/precision integer. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_afa0eacfccee374f6e7d4bdf388ddca01}{mpclrlsb} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function clears the least significant bit of a multi-\/precision integer. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_a13f975884c63ac0be76d2b444a7c6eb4}{mpand} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function computes the bit-\/wise AND of two multi-\/precision integers. Modifies xdata. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_aa1baaac1e8919a218b2369355a8c1c63}{mpor} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function computes the bit-\/wise OR of two multi-\/precision integers. Modifies xdata. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_a6373a586b0e90cb78179143c89de4132}{mpxor} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function computes the bit-\/wise XOR of two multi-\/precision integers. Modifies xdata. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_ad0c8185589374810679c5a0cbbe3e0ca}{mpnot} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function flips all bits of a multi-\/precision integer. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_ad9f0efe339edc592551911ba2216e8cd}{mpsetw} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} y) \begin{DoxyCompactList}\small\item\em 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. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_aa6dec413795f2d0138d09cb640dc81df}{mpsetws} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t y) \begin{DoxyCompactList}\small\item\em This function sets the value of a multi-\/precision integer to the given word. The given value is copied into the least significant word(s), while the most significant words are zeroed. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_af94f0424014578a78d77c2084f3f3d5d}{mpsetx} (size\_\-t xsize, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em 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. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ad2926f765db1823a1d17a285d97e9ced}{mpaddw} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} y) \begin{DoxyCompactList}\small\item\em This function adds one word to a multi-\/precision integer. The performed operation is in pseudocode: x += y. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a3dad536563420e9c1f4445a08f37c681}{mpadd} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function adds two multi-\/precision integers of equal size. The performed operation is in pseudocode: x += y. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a101cb432729cd51b2a922ea4ec2281af}{mpaddx} (size\_\-t xsize, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function adds two multi-\/precision integers of different size. The performed operation in pseudocode: x += y. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a5814eb1185a0dc05da2f86323f5c8978}{mpsubw} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} y) \begin{DoxyCompactList}\small\item\em This function subtracts one word to a multi-\/precision integer. The performed operation in pseudocode: x -\/= y. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_a49e790df163e11d7230d81bbc8d5fde2}{mpsub} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function subtracts two multi-\/precision integers of equal size. The performed operation in pseudocode: x -\/= y. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ae77b6a530198f3d8b3d9005b7cbcc0e5}{mpsubx} (size\_\-t xsize, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function subtracts two multi-\/precision integers of different size. The performed operation in pseudocode: x -\/= y. \item\end{DoxyCompactList}\item int \hyperlink{mp_8h_ac7f624f09b82cc0451fd76932564a69e}{mpmultwo} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item void \hyperlink{mp_8h_a5f26c9e232c74bacea5ae785692de1d4}{mpneg} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function negates a multi-\/precision integer. \item\end{DoxyCompactList}\item size\_\-t \hyperlink{mp_8h_a5847c378eda16688587b23753b65e972}{mpsize} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function returns the true size of a multi-\/precision integer, after stripping leading zero words. \item\end{DoxyCompactList}\item size\_\-t \hyperlink{mp_8h_abf18ad28b007603fdcc1d4c3695056e0}{mpbits} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function returns the number of significant bits in a multi-\/precision integer. \item\end{DoxyCompactList}\item size\_\-t \hyperlink{mp_8h_a49ae96d66620926a51acc81e915696e5}{mpmszcnt} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item size\_\-t \hyperlink{mp_8h_a4a0a37729f64e516b74d3689db90eaf8}{mplszcnt} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item void \hyperlink{mp_8h_aa458547531ad86f7304d1beab35a5e7e}{mplshift} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data, size\_\-t count) \item void \hyperlink{mp_8h_acbbc33f1d523347abbea10b755822c05}{mprshift} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data, size\_\-t count) \item size\_\-t \hyperlink{mp_8h_a2ce894dd95d1f2e82a8afcc75fffaa9c}{mprshiftlsz} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item size\_\-t \hyperlink{mp_8h_a0b54adf94eaee674a4e3490b30a2f954}{mpnorm} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item void \hyperlink{mp_8h_a9bb92b1971621bcb54326369dc641ecf}{mpdivtwo} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item void \hyperlink{mp_8h_a9267926999bef7cfae96f50ec8fa7bd6}{mpsdivtwo} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} \hyperlink{mp_8h_a659c97a015a63a4405c9a45e6a1b49e6}{mpsetmul} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$result, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} y) \begin{DoxyCompactList}\small\item\em This function performs a multi-\/precision multiply-\/setup. \item\end{DoxyCompactList}\item \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} \hyperlink{mp_8h_af6319411048f3dd303dfc3297b7c304f}{mpaddmul} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$result, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} y) \begin{DoxyCompactList}\small\item\em This function performs a mult-\/precision multiply-\/accumulate. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_a5891518a4754596508b8ba8002499714}{mpaddsqrtrc} (size\_\-t size, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$result, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function is used in the calculation of a multi-\/precision squaring. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_aa936396b75b6e41298482020363c2a94}{mpmul} (\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$result, size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata) \begin{DoxyCompactList}\small\item\em This function computes a full multi-\/precision product. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_a7703ab7d9b0b2b4f1ebc6f7415029c9b}{mpsqr} (\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$result, size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \begin{DoxyCompactList}\small\item\em This function computes a full multi-\/precision square. \item\end{DoxyCompactList}\item void \hyperlink{mp_8h_a599e5e794ea7df612bbdeba64cbddf12}{mpgcd\_\-w} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$result, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$wksp) \item int \hyperlink{mp_8h_a872a570802ee8bbf3dc24df3361dcbc4}{mpextgcd\_\-w} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$result, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$wksp) \item \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} \hyperlink{mp_8h_a0f56eafb94580fd8d838ae86a3a4e6f7}{mppndiv} (\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} xhi, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} xlo, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} y) \item void \hyperlink{mp_8h_a8a0e5d0430ecb60521593164a766294b}{mpmod} (\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$result, size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$wksp) \item void \hyperlink{mp_8h_af2f708ed3c44a665a0024b11dc8e2817}{mpndivmod} (\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$result, size\_\-t xsize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$xdata, size\_\-t ysize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$ydata, \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$wksp) \item void \hyperlink{mp_8h_ac1b16cee4b287487d5fde0f423b1f8e5}{mpprint} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item void \hyperlink{mp_8h_ae3dcf4ff639792019af97bfb9585107a}{mpprintln} (size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item void \hyperlink{mp_8h_a9d9d384955be2de91d8edcfc368e7079}{mpfprint} (FILE $\ast$f, size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item void \hyperlink{mp_8h_acc68e89bb559d3e271fef4400be91db0}{mpfprintln} (FILE $\ast$f, size\_\-t size, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$data) \item int \hyperlink{mp_8h_ae82af22d91fe3e6a94cd649ab4bc7b3c}{i2osp} (\hyperlink{api_8h_ab8ef12fab634c171394422d0ee8baf94}{byte} $\ast$osdata, size\_\-t ossize, const \hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$idata, size\_\-t isize) \item int \hyperlink{mp_8h_a2e26b9c3109b8a41a8c87bcfe1dfbfc8}{os2ip} (\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$idata, size\_\-t isize, const \hyperlink{api_8h_ab8ef12fab634c171394422d0ee8baf94}{byte} $\ast$osdata, size\_\-t ossize) \item int \hyperlink{mp_8h_a75f587dd2a2c286258832da478297c7b}{hs2ip} (\hyperlink{api_8h_af807108d471a7c68e58df13068048e03}{mpw} $\ast$idata, size\_\-t isize, const char $\ast$hsdata, size\_\-t hssize) \end{DoxyCompactItemize} \subsection{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): \begin{DoxyItemize} \item mpaddmul \item mpsetmul \item mpaddsqrtrc \item mpsub \item mpadd \end{DoxyItemize} With some smart use of available assembler instructions, it's possible to speed these routines up by a factor of 2 to 4. \begin{DoxyAuthor}{Author} Bob Deblier $<$\href{mailto:bob.deblier@telenet.be}{\tt bob.deblier@telenet.be}$>$ \end{DoxyAuthor} \subsection{Define Documentation} \hypertarget{mp_8h_af5466aa801f08b6c63e02f54cfc7106b}{ \index{mp.h@{mp.h}!MP\_\-ALLMASK@{MP\_\-ALLMASK}} \index{MP\_\-ALLMASK@{MP\_\-ALLMASK}!mp.h@{mp.h}} \subsubsection[{MP\_\-ALLMASK}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-ALLMASK~$\sim$(({\bf mpw}) 0x0)}} \label{mp_8h_af5466aa801f08b6c63e02f54cfc7106b} \hypertarget{mp_8h_ad05de288398b539cf645bec59d9f27e8}{ \index{mp.h@{mp.h}!MP\_\-BITS\_\-TO\_\-WORDS@{MP\_\-BITS\_\-TO\_\-WORDS}} \index{MP\_\-BITS\_\-TO\_\-WORDS@{MP\_\-BITS\_\-TO\_\-WORDS}!mp.h@{mp.h}} \subsubsection[{MP\_\-BITS\_\-TO\_\-WORDS}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-BITS\_\-TO\_\-WORDS( \begin{DoxyParamCaption} \item[{}]{x} \end{DoxyParamCaption} )~((x) $>$$>$ 5)}} \label{mp_8h_ad05de288398b539cf645bec59d9f27e8} \hypertarget{mp_8h_a9b78d45cecc26f578dc32c4ae2c803dd}{ \index{mp.h@{mp.h}!MP\_\-BYTES\_\-TO\_\-WORDS@{MP\_\-BYTES\_\-TO\_\-WORDS}} \index{MP\_\-BYTES\_\-TO\_\-WORDS@{MP\_\-BYTES\_\-TO\_\-WORDS}!mp.h@{mp.h}} \subsubsection[{MP\_\-BYTES\_\-TO\_\-WORDS}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-BYTES\_\-TO\_\-WORDS( \begin{DoxyParamCaption} \item[{}]{x} \end{DoxyParamCaption} )~((x) $>$$>$ 2)}} \label{mp_8h_a9b78d45cecc26f578dc32c4ae2c803dd} \hypertarget{mp_8h_a3317414bc77cc27f0c50d300fc93db7e}{ \index{mp.h@{mp.h}!MP\_\-HWBITS@{MP\_\-HWBITS}} \index{MP\_\-HWBITS@{MP\_\-HWBITS}!mp.h@{mp.h}} \subsubsection[{MP\_\-HWBITS}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-HWBITS~(MP\_\-WBITS $>$$>$ 1)}} \label{mp_8h_a3317414bc77cc27f0c50d300fc93db7e} \hypertarget{mp_8h_a137aeb18139f4f7c871639eb67ecf7b9}{ \index{mp.h@{mp.h}!MP\_\-LSBMASK@{MP\_\-LSBMASK}} \index{MP\_\-LSBMASK@{MP\_\-LSBMASK}!mp.h@{mp.h}} \subsubsection[{MP\_\-LSBMASK}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-LSBMASK~(({\bf mpw}) 0x1)}} \label{mp_8h_a137aeb18139f4f7c871639eb67ecf7b9} \hypertarget{mp_8h_a696235b870f5868d66258cbfc903affa}{ \index{mp.h@{mp.h}!MP\_\-MSBMASK@{MP\_\-MSBMASK}} \index{MP\_\-MSBMASK@{MP\_\-MSBMASK}!mp.h@{mp.h}} \subsubsection[{MP\_\-MSBMASK}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-MSBMASK~((({\bf mpw}) 0x1) $<$$<$ (MP\_\-WBITS-\/1))}} \label{mp_8h_a696235b870f5868d66258cbfc903affa} \hypertarget{mp_8h_a65dc4dd0b6906f36f66e42a55097b8b1}{ \index{mp.h@{mp.h}!MP\_\-NIBBLES\_\-TO\_\-WORDS@{MP\_\-NIBBLES\_\-TO\_\-WORDS}} \index{MP\_\-NIBBLES\_\-TO\_\-WORDS@{MP\_\-NIBBLES\_\-TO\_\-WORDS}!mp.h@{mp.h}} \subsubsection[{MP\_\-NIBBLES\_\-TO\_\-WORDS}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-NIBBLES\_\-TO\_\-WORDS( \begin{DoxyParamCaption} \item[{}]{x} \end{DoxyParamCaption} )~((x) $>$$>$ 3)}} \label{mp_8h_a65dc4dd0b6906f36f66e42a55097b8b1} \hypertarget{mp_8h_ac32fb614379620608d1c733a79132cfa}{ \index{mp.h@{mp.h}!MP\_\-WBYTES@{MP\_\-WBYTES}} \index{MP\_\-WBYTES@{MP\_\-WBYTES}!mp.h@{mp.h}} \subsubsection[{MP\_\-WBYTES}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-WBYTES~(MP\_\-WBITS $>$$>$ 3)}} \label{mp_8h_ac32fb614379620608d1c733a79132cfa} \hypertarget{mp_8h_a3650f0cbb0aaa7100a4a7fba476920bf}{ \index{mp.h@{mp.h}!MP\_\-WNIBBLES@{MP\_\-WNIBBLES}} \index{MP\_\-WNIBBLES@{MP\_\-WNIBBLES}!mp.h@{mp.h}} \subsubsection[{MP\_\-WNIBBLES}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-WNIBBLES~(MP\_\-WBITS $>$$>$ 2)}} \label{mp_8h_a3650f0cbb0aaa7100a4a7fba476920bf} \hypertarget{mp_8h_a7a243883fb94433b237da964799fabcd}{ \index{mp.h@{mp.h}!MP\_\-WORDS\_\-TO\_\-BITS@{MP\_\-WORDS\_\-TO\_\-BITS}} \index{MP\_\-WORDS\_\-TO\_\-BITS@{MP\_\-WORDS\_\-TO\_\-BITS}!mp.h@{mp.h}} \subsubsection[{MP\_\-WORDS\_\-TO\_\-BITS}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-WORDS\_\-TO\_\-BITS( \begin{DoxyParamCaption} \item[{}]{x} \end{DoxyParamCaption} )~((x) $<$$<$ 5)}} \label{mp_8h_a7a243883fb94433b237da964799fabcd} \hypertarget{mp_8h_a337d99143ec5b28671099a5ea022f3b9}{ \index{mp.h@{mp.h}!MP\_\-WORDS\_\-TO\_\-BYTES@{MP\_\-WORDS\_\-TO\_\-BYTES}} \index{MP\_\-WORDS\_\-TO\_\-BYTES@{MP\_\-WORDS\_\-TO\_\-BYTES}!mp.h@{mp.h}} \subsubsection[{MP\_\-WORDS\_\-TO\_\-BYTES}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-WORDS\_\-TO\_\-BYTES( \begin{DoxyParamCaption} \item[{}]{x} \end{DoxyParamCaption} )~((x) $<$$<$ 2)}} \label{mp_8h_a337d99143ec5b28671099a5ea022f3b9} \hypertarget{mp_8h_ab77b2dd70af10d0705b6048dc732a4dc}{ \index{mp.h@{mp.h}!MP\_\-WORDS\_\-TO\_\-NIBBLES@{MP\_\-WORDS\_\-TO\_\-NIBBLES}} \index{MP\_\-WORDS\_\-TO\_\-NIBBLES@{MP\_\-WORDS\_\-TO\_\-NIBBLES}!mp.h@{mp.h}} \subsubsection[{MP\_\-WORDS\_\-TO\_\-NIBBLES}]{\setlength{\rightskip}{0pt plus 5cm}\#define MP\_\-WORDS\_\-TO\_\-NIBBLES( \begin{DoxyParamCaption} \item[{}]{x} \end{DoxyParamCaption} )~((x) $<$$<$ 3)}} \label{mp_8h_ab77b2dd70af10d0705b6048dc732a4dc} \hypertarget{mp_8h_afb750ee5bfe6cdd5a0ed87dccf981d80}{ \index{mp.h@{mp.h}!mpcopy@{mpcopy}} \index{mpcopy@{mpcopy}!mp.h@{mp.h}} \subsubsection[{mpcopy}]{\setlength{\rightskip}{0pt plus 5cm}\#define mpcopy( \begin{DoxyParamCaption} \item[{}]{size, } \item[{}]{dst, } \item[{}]{src} \end{DoxyParamCaption} )~memcpy(dst, src, MP\_\-WORDS\_\-TO\_\-BYTES(size))}} \label{mp_8h_afb750ee5bfe6cdd5a0ed87dccf981d80} \hypertarget{mp_8h_abddd3139e57f9db0c67a896024bc9684}{ \index{mp.h@{mp.h}!mpmove@{mpmove}} \index{mpmove@{mpmove}!mp.h@{mp.h}} \subsubsection[{mpmove}]{\setlength{\rightskip}{0pt plus 5cm}\#define mpmove( \begin{DoxyParamCaption} \item[{}]{size, } \item[{}]{dst, } \item[{}]{src} \end{DoxyParamCaption} )~memmove(dst, src, MP\_\-WORDS\_\-TO\_\-BYTES(size))}} \label{mp_8h_abddd3139e57f9db0c67a896024bc9684} \subsection{Function Documentation} \hypertarget{mp_8h_a75f587dd2a2c286258832da478297c7b}{ \index{mp.h@{mp.h}!hs2ip@{hs2ip}} \index{hs2ip@{hs2ip}!mp.h@{mp.h}} \subsubsection[{hs2ip}]{\setlength{\rightskip}{0pt plus 5cm}int hs2ip ( \begin{DoxyParamCaption} \item[{{\bf mpw} $\ast$}]{idata, } \item[{size\_\-t}]{isize, } \item[{const char $\ast$}]{hsdata, } \item[{size\_\-t}]{hssize} \end{DoxyParamCaption} )}} \label{mp_8h_a75f587dd2a2c286258832da478297c7b} \hypertarget{mp_8h_ae82af22d91fe3e6a94cd649ab4bc7b3c}{ \index{mp.h@{mp.h}!i2osp@{i2osp}} \index{i2osp@{i2osp}!mp.h@{mp.h}} \subsubsection[{i2osp}]{\setlength{\rightskip}{0pt plus 5cm}int i2osp ( \begin{DoxyParamCaption} \item[{{\bf byte} $\ast$}]{osdata, } \item[{size\_\-t}]{ossize, } \item[{const {\bf mpw} $\ast$}]{idata, } \item[{size\_\-t}]{isize} \end{DoxyParamCaption} )}} \label{mp_8h_ae82af22d91fe3e6a94cd649ab4bc7b3c} \hypertarget{mp_8h_a3dad536563420e9c1f4445a08f37c681}{ \index{mp.h@{mp.h}!mpadd@{mpadd}} \index{mpadd@{mpadd}!mp.h@{mp.h}} \subsubsection[{mpadd}]{\setlength{\rightskip}{0pt plus 5cm}int mpadd ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_a3dad536563420e9c1f4445a08f37c681} This function adds two multi-\/precision integers of equal size. The performed operation is in pseudocode: x += y. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} The carry-\/over value of the operation; this value is either 0 or 1. \end{DoxyReturn} \hypertarget{mp_8h_af6319411048f3dd303dfc3297b7c304f}{ \index{mp.h@{mp.h}!mpaddmul@{mpaddmul}} \index{mpaddmul@{mpaddmul}!mp.h@{mp.h}} \subsubsection[{mpaddmul}]{\setlength{\rightskip}{0pt plus 5cm}{\bf mpw} mpaddmul ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{result, } \item[{const {\bf mpw} $\ast$}]{data, } \item[{{\bf mpw}}]{y} \end{DoxyParamCaption} )}} \label{mp_8h_af6319411048f3dd303dfc3297b7c304f} 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. \begin{DoxyParams}{Parameters} {\em size} & The size of multi-\/precision integer multiplier. \\ \hline {\em result} & The place where result will be accumulated. \\ \hline {\em data} & The multi-\/precision integer multiplier. \\ \hline {\em y} & The multiplicand. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em The} & carry-\/over multi-\/precision word. \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a5891518a4754596508b8ba8002499714}{ \index{mp.h@{mp.h}!mpaddsqrtrc@{mpaddsqrtrc}} \index{mpaddsqrtrc@{mpaddsqrtrc}!mp.h@{mp.h}} \subsubsection[{mpaddsqrtrc}]{\setlength{\rightskip}{0pt plus 5cm}void mpaddsqrtrc ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{result, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a5891518a4754596508b8ba8002499714} This function is used in the calculation of a multi-\/precision squaring. \hypertarget{mp_8h_ad2926f765db1823a1d17a285d97e9ced}{ \index{mp.h@{mp.h}!mpaddw@{mpaddw}} \index{mpaddw@{mpaddw}!mp.h@{mp.h}} \subsubsection[{mpaddw}]{\setlength{\rightskip}{0pt plus 5cm}int mpaddw ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{{\bf mpw}}]{y} \end{DoxyParamCaption} )}} \label{mp_8h_ad2926f765db1823a1d17a285d97e9ced} This function adds one word to a multi-\/precision integer. The performed operation is in pseudocode: x += y. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em y} & The multi-\/precision word. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} The carry-\/over value of the operation; this value is either 0 or 1. \end{DoxyReturn} \hypertarget{mp_8h_a101cb432729cd51b2a922ea4ec2281af}{ \index{mp.h@{mp.h}!mpaddx@{mpaddx}} \index{mpaddx@{mpaddx}!mp.h@{mp.h}} \subsubsection[{mpaddx}]{\setlength{\rightskip}{0pt plus 5cm}int mpaddx ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_a101cb432729cd51b2a922ea4ec2281af} This function adds two multi-\/precision integers of different size. The performed operation in pseudocode: x += y. \begin{DoxyParams}{Parameters} {\em xsize} & The size of the first multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ysize} & The size of the second multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} The carry-\/over value of the operation; this value is either 0 or 1. \end{DoxyReturn} \hypertarget{mp_8h_a13f975884c63ac0be76d2b444a7c6eb4}{ \index{mp.h@{mp.h}!mpand@{mpand}} \index{mpand@{mpand}!mp.h@{mp.h}} \subsubsection[{mpand}]{\setlength{\rightskip}{0pt plus 5cm}mpand ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_a13f975884c63ac0be76d2b444a7c6eb4} This function computes the bit-\/wise AND of two multi-\/precision integers. Modifies xdata. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The multi-\/precision integer data. \\ \hline {\em ydata} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_abf18ad28b007603fdcc1d4c3695056e0}{ \index{mp.h@{mp.h}!mpbits@{mpbits}} \index{mpbits@{mpbits}!mp.h@{mp.h}} \subsubsection[{mpbits}]{\setlength{\rightskip}{0pt plus 5cm}size\_\-t mpbits ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_abf18ad28b007603fdcc1d4c3695056e0} This function returns the number of significant bits in a multi-\/precision integer. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_afa0eacfccee374f6e7d4bdf388ddca01}{ \index{mp.h@{mp.h}!mpclrlsb@{mpclrlsb}} \index{mpclrlsb@{mpclrlsb}!mp.h@{mp.h}} \subsubsection[{mpclrlsb}]{\setlength{\rightskip}{0pt plus 5cm}void mpclrlsb ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_afa0eacfccee374f6e7d4bdf388ddca01} This function clears the least significant bit of a multi-\/precision integer. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_a298b2af39ad306efab02829d83d86b4b}{ \index{mp.h@{mp.h}!mpclrmsb@{mpclrmsb}} \index{mpclrmsb@{mpclrmsb}!mp.h@{mp.h}} \subsubsection[{mpclrmsb}]{\setlength{\rightskip}{0pt plus 5cm}void mpclrmsb ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a298b2af39ad306efab02829d83d86b4b} This function clears the most significant bit of a multi-\/precision integer. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_acc8c19971240f6ea22f6b81c1db3553b}{ \index{mp.h@{mp.h}!mpcmp@{mpcmp}} \index{mpcmp@{mpcmp}!mp.h@{mp.h}} \subsubsection[{mpcmp}]{\setlength{\rightskip}{0pt plus 5cm}int mpcmp ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_acc8c19971240f6ea22f6b81c1db3553b} This function performs a comparison of two multi-\/precision integers of the same size. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyRetVals}{Return values} {\em -\/1} & if x $<$ y \\ \hline {\em 0} & if x == y \\ \hline {\em 1} & if x $>$ y \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_ac0b786d9f5d016b2d0d06b22d6f89862}{ \index{mp.h@{mp.h}!mpcmpx@{mpcmpx}} \index{mpcmpx@{mpcmpx}!mp.h@{mp.h}} \subsubsection[{mpcmpx}]{\setlength{\rightskip}{0pt plus 5cm}int mpcmpx ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_ac0b786d9f5d016b2d0d06b22d6f89862} This function performs a comparison of two multi-\/precision integers of the different size. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyRetVals}{Return values} {\em -\/1} & if x $<$ y \\ \hline {\em 0} & if x == y \\ \hline {\em 1} & if x $>$ y \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a9bb92b1971621bcb54326369dc641ecf}{ \index{mp.h@{mp.h}!mpdivtwo@{mpdivtwo}} \index{mpdivtwo@{mpdivtwo}!mp.h@{mp.h}} \subsubsection[{mpdivtwo}]{\setlength{\rightskip}{0pt plus 5cm}void mpdivtwo ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a9bb92b1971621bcb54326369dc641ecf} \hypertarget{mp_8h_ae801d1996190439b2cf80548f6a03a31}{ \index{mp.h@{mp.h}!mpeq@{mpeq}} \index{mpeq@{mpeq}!mp.h@{mp.h}} \subsubsection[{mpeq}]{\setlength{\rightskip}{0pt plus 5cm}int mpeq ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_ae801d1996190439b2cf80548f6a03a31} This function tests if two multi-\/precision integers of the same size are equal. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if equal \\ \hline {\em 0} & if not equal \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a75df6af46d913aad6f591583683d04e7}{ \index{mp.h@{mp.h}!mpeqmone@{mpeqmone}} \index{mpeqmone@{mpeqmone}!mp.h@{mp.h}} \subsubsection[{mpeqmone}]{\setlength{\rightskip}{0pt plus 5cm}int mpeqmone ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_a75df6af46d913aad6f591583683d04e7} This function tests if multi-\/precision integer x is equal to y minus one. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if less than or equal to one. \\ \hline {\em 0} & if greater than one. \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_af51c09b612e8033399cff6febdb9b505}{ \index{mp.h@{mp.h}!mpeqx@{mpeqx}} \index{mpeqx@{mpeqx}!mp.h@{mp.h}} \subsubsection[{mpeqx}]{\setlength{\rightskip}{0pt plus 5cm}int mpeqx ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_af51c09b612e8033399cff6febdb9b505} This function tests if two multi-\/precision integers of different size are equal. \begin{DoxyParams}{Parameters} {\em xsize} & The size of the first multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ysize} & The size of the first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if equal \\ \hline {\em 0} & if not equal \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_ab0520c67c603a7e32c9eeb6a39a02595}{ \index{mp.h@{mp.h}!mpeven@{mpeven}} \index{mpeven@{mpeven}!mp.h@{mp.h}} \subsubsection[{mpeven}]{\setlength{\rightskip}{0pt plus 5cm}int mpeven ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ab0520c67c603a7e32c9eeb6a39a02595} This function tests if a multi-\/precision integer is even. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if even \\ \hline {\em 0} & if odd \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a872a570802ee8bbf3dc24df3361dcbc4}{ \index{mp.h@{mp.h}!mpextgcd\_\-w@{mpextgcd\_\-w}} \index{mpextgcd\_\-w@{mpextgcd\_\-w}!mp.h@{mp.h}} \subsubsection[{mpextgcd\_\-w}]{\setlength{\rightskip}{0pt plus 5cm}int mpextgcd\_\-w ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata, } \item[{{\bf mpw} $\ast$}]{result, } \item[{{\bf mpw} $\ast$}]{wksp} \end{DoxyParamCaption} )}} \label{mp_8h_a872a570802ee8bbf3dc24df3361dcbc4} \hypertarget{mp_8h_a1624fb65f4a9cac6f6246d64bb0189ea}{ \index{mp.h@{mp.h}!mpfill@{mpfill}} \index{mpfill@{mpfill}!mp.h@{mp.h}} \subsubsection[{mpfill}]{\setlength{\rightskip}{0pt plus 5cm}void mpfill ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data, } \item[{{\bf mpw}}]{fill} \end{DoxyParamCaption} )}} \label{mp_8h_a1624fb65f4a9cac6f6246d64bb0189ea} This function fills each word of a multi-\/precision integer with a given value. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline {\em fill} & The value fill the data with. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_a9d9d384955be2de91d8edcfc368e7079}{ \index{mp.h@{mp.h}!mpfprint@{mpfprint}} \index{mpfprint@{mpfprint}!mp.h@{mp.h}} \subsubsection[{mpfprint}]{\setlength{\rightskip}{0pt plus 5cm}void mpfprint ( \begin{DoxyParamCaption} \item[{FILE $\ast$}]{f, } \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a9d9d384955be2de91d8edcfc368e7079} \hypertarget{mp_8h_acc68e89bb559d3e271fef4400be91db0}{ \index{mp.h@{mp.h}!mpfprintln@{mpfprintln}} \index{mpfprintln@{mpfprintln}!mp.h@{mp.h}} \subsubsection[{mpfprintln}]{\setlength{\rightskip}{0pt plus 5cm}void mpfprintln ( \begin{DoxyParamCaption} \item[{FILE $\ast$}]{f, } \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_acc68e89bb559d3e271fef4400be91db0} \hypertarget{mp_8h_a599e5e794ea7df612bbdeba64cbddf12}{ \index{mp.h@{mp.h}!mpgcd\_\-w@{mpgcd\_\-w}} \index{mpgcd\_\-w@{mpgcd\_\-w}!mp.h@{mp.h}} \subsubsection[{mpgcd\_\-w}]{\setlength{\rightskip}{0pt plus 5cm}void mpgcd\_\-w ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata, } \item[{{\bf mpw} $\ast$}]{result, } \item[{{\bf mpw} $\ast$}]{wksp} \end{DoxyParamCaption} )}} \label{mp_8h_a599e5e794ea7df612bbdeba64cbddf12} \hypertarget{mp_8h_ae01843e52c6a0b0c28c345d8040670dc}{ \index{mp.h@{mp.h}!mpge@{mpge}} \index{mpge@{mpge}!mp.h@{mp.h}} \subsubsection[{mpge}]{\setlength{\rightskip}{0pt plus 5cm}int mpge ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_ae01843e52c6a0b0c28c345d8040670dc} This function tests if the first of two multi-\/precision integers of the same size is greater than or equal to the second. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if greater or equal \\ \hline {\em 0} & if less \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a01b1186616ddfd912772cddce1fc292b}{ \index{mp.h@{mp.h}!mpgex@{mpgex}} \index{mpgex@{mpgex}!mp.h@{mp.h}} \subsubsection[{mpgex}]{\setlength{\rightskip}{0pt plus 5cm}int mpgex ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_a01b1186616ddfd912772cddce1fc292b} This function tests if the first of two multi-\/precision integers of different size is greater than or equal to the second. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyParams}{Parameters} {\em xsize} & The size of the first multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ysize} & The size of the second multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if greater or equal \\ \hline {\em 0} & if less \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_ae4905ad4ef2bb6b7e8a2aa79460041c6}{ \index{mp.h@{mp.h}!mpgt@{mpgt}} \index{mpgt@{mpgt}!mp.h@{mp.h}} \subsubsection[{mpgt}]{\setlength{\rightskip}{0pt plus 5cm}int mpgt ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_ae4905ad4ef2bb6b7e8a2aa79460041c6} This function tests if the first of two multi-\/precision integers of the same size is greater than the second. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if greater \\ \hline {\em 0} & if less or equal \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_ae2a7b28715b9a820ceda11b77d901953}{ \index{mp.h@{mp.h}!mpgtx@{mpgtx}} \index{mpgtx@{mpgtx}!mp.h@{mp.h}} \subsubsection[{mpgtx}]{\setlength{\rightskip}{0pt plus 5cm}int mpgtx ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_ae2a7b28715b9a820ceda11b77d901953} This function tests if the first of two multi-\/precision integers of different size is greater than the second. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyParams}{Parameters} {\em xsize} & The size of the first multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ysize} & The size of the second multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if greater \\ \hline {\em 0} & if less or equal \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_ae9ab3d1ce03ffda281d610fd8123b06e}{ \index{mp.h@{mp.h}!mpisone@{mpisone}} \index{mpisone@{mpisone}!mp.h@{mp.h}} \subsubsection[{mpisone}]{\setlength{\rightskip}{0pt plus 5cm}int mpisone ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ae9ab3d1ce03ffda281d610fd8123b06e} This functions tests if the value of a multi-\/precision integer is equal to one. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if one \\ \hline {\em 0} & if not one \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a0605a0ef9815dce0cf2743aafdac03e6}{ \index{mp.h@{mp.h}!mpistwo@{mpistwo}} \index{mpistwo@{mpistwo}!mp.h@{mp.h}} \subsubsection[{mpistwo}]{\setlength{\rightskip}{0pt plus 5cm}int mpistwo ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a0605a0ef9815dce0cf2743aafdac03e6} This function tests if the value of a multi-\/precision integer is equal to two. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if two \\ \hline {\em 0} & if not two \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_af987c3b7b75fc0eae1f97aab58888006}{ \index{mp.h@{mp.h}!mple@{mple}} \index{mple@{mple}!mp.h@{mp.h}} \subsubsection[{mple}]{\setlength{\rightskip}{0pt plus 5cm}int mple ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_af987c3b7b75fc0eae1f97aab58888006} This function tests if the first of two multi-\/precision integers of the same size is less than or equal to the second. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if less or equal \\ \hline {\em 0} & if greater \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_af1f8a61b04fe27911d51aec0c6468238}{ \index{mp.h@{mp.h}!mpleone@{mpleone}} \index{mpleone@{mpleone}!mp.h@{mp.h}} \subsubsection[{mpleone}]{\setlength{\rightskip}{0pt plus 5cm}int mpleone ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_af1f8a61b04fe27911d51aec0c6468238} This function tests if the value of a multi-\/precision integer is less than or equal to one. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if less than or equal to one. \\ \hline {\em 0} & if greater than one. \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_adbd7f836f9246cf904207315c346a56c}{ \index{mp.h@{mp.h}!mplex@{mplex}} \index{mplex@{mplex}!mp.h@{mp.h}} \subsubsection[{mplex}]{\setlength{\rightskip}{0pt plus 5cm}int mplex ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_adbd7f836f9246cf904207315c346a56c} This function tests if the first of two multi-\/precision integers of different size is less than or equal to the second. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyParams}{Parameters} {\em xsize} & The size of the first multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ysize} & The size of the second multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if less or equal \\ \hline {\em 0} & if greater \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a84c1045a3fe0074b8b954679bcee62de}{ \index{mp.h@{mp.h}!mplsbset@{mplsbset}} \index{mplsbset@{mplsbset}!mp.h@{mp.h}} \subsubsection[{mplsbset}]{\setlength{\rightskip}{0pt plus 5cm}int mplsbset ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a84c1045a3fe0074b8b954679bcee62de} This function tests if the leiast significant bit of a multi-\/precision integer is set. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if set \\ \hline {\em 0} & if not set \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_aa458547531ad86f7304d1beab35a5e7e}{ \index{mp.h@{mp.h}!mplshift@{mplshift}} \index{mplshift@{mplshift}!mp.h@{mp.h}} \subsubsection[{mplshift}]{\setlength{\rightskip}{0pt plus 5cm}void mplshift ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data, } \item[{size\_\-t}]{count} \end{DoxyParamCaption} )}} \label{mp_8h_aa458547531ad86f7304d1beab35a5e7e} \hypertarget{mp_8h_a4a0a37729f64e516b74d3689db90eaf8}{ \index{mp.h@{mp.h}!mplszcnt@{mplszcnt}} \index{mplszcnt@{mplszcnt}!mp.h@{mp.h}} \subsubsection[{mplszcnt}]{\setlength{\rightskip}{0pt plus 5cm}size\_\-t mplszcnt ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a4a0a37729f64e516b74d3689db90eaf8} \hypertarget{mp_8h_af4e3a7316789993b73b2289bf34c837b}{ \index{mp.h@{mp.h}!mplt@{mplt}} \index{mplt@{mplt}!mp.h@{mp.h}} \subsubsection[{mplt}]{\setlength{\rightskip}{0pt plus 5cm}int mplt ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_af4e3a7316789993b73b2289bf34c837b} This function tests if the first of two multi-\/precision integers of the same size is less than the second. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if less \\ \hline {\em 0} & if greater or equal \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a2d772e5778ec336da5a56302f21786a0}{ \index{mp.h@{mp.h}!mpltx@{mpltx}} \index{mpltx@{mpltx}!mp.h@{mp.h}} \subsubsection[{mpltx}]{\setlength{\rightskip}{0pt plus 5cm}int mpltx ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_a2d772e5778ec336da5a56302f21786a0} This function tests if the first of two multi-\/precision integers of different size is less than the second. \begin{DoxyNote}{Note} The comparison treats the arguments as unsigned. \end{DoxyNote} \begin{DoxyParams}{Parameters} {\em xsize} & The size of the first multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ysize} & The size of the second multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if less \\ \hline {\em 0} & if greater or equal \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a8a0e5d0430ecb60521593164a766294b}{ \index{mp.h@{mp.h}!mpmod@{mpmod}} \index{mpmod@{mpmod}!mp.h@{mp.h}} \subsubsection[{mpmod}]{\setlength{\rightskip}{0pt plus 5cm}void mpmod ( \begin{DoxyParamCaption} \item[{{\bf mpw} $\ast$}]{result, } \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata, } \item[{{\bf mpw} $\ast$}]{wksp} \end{DoxyParamCaption} )}} \label{mp_8h_a8a0e5d0430ecb60521593164a766294b} \hypertarget{mp_8h_a12d85e63b1d9f4d68909c51890ef0738}{ \index{mp.h@{mp.h}!mpmsbset@{mpmsbset}} \index{mpmsbset@{mpmsbset}!mp.h@{mp.h}} \subsubsection[{mpmsbset}]{\setlength{\rightskip}{0pt plus 5cm}int mpmsbset ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a12d85e63b1d9f4d68909c51890ef0738} This function tests if the most significant bit of a multi-\/precision integer is set. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if set \\ \hline {\em 0} & if not set \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a49ae96d66620926a51acc81e915696e5}{ \index{mp.h@{mp.h}!mpmszcnt@{mpmszcnt}} \index{mpmszcnt@{mpmszcnt}!mp.h@{mp.h}} \subsubsection[{mpmszcnt}]{\setlength{\rightskip}{0pt plus 5cm}size\_\-t mpmszcnt ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a49ae96d66620926a51acc81e915696e5} \hypertarget{mp_8h_aa936396b75b6e41298482020363c2a94}{ \index{mp.h@{mp.h}!mpmul@{mpmul}} \index{mpmul@{mpmul}!mp.h@{mp.h}} \subsubsection[{mpmul}]{\setlength{\rightskip}{0pt plus 5cm}void mpmul ( \begin{DoxyParamCaption} \item[{{\bf mpw} $\ast$}]{result, } \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_aa936396b75b6e41298482020363c2a94} This function computes a full multi-\/precision product. \hypertarget{mp_8h_ac7f624f09b82cc0451fd76932564a69e}{ \index{mp.h@{mp.h}!mpmultwo@{mpmultwo}} \index{mpmultwo@{mpmultwo}!mp.h@{mp.h}} \subsubsection[{mpmultwo}]{\setlength{\rightskip}{0pt plus 5cm}int mpmultwo ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ac7f624f09b82cc0451fd76932564a69e} \hypertarget{mp_8h_af2f708ed3c44a665a0024b11dc8e2817}{ \index{mp.h@{mp.h}!mpndivmod@{mpndivmod}} \index{mpndivmod@{mpndivmod}!mp.h@{mp.h}} \subsubsection[{mpndivmod}]{\setlength{\rightskip}{0pt plus 5cm}void mpndivmod ( \begin{DoxyParamCaption} \item[{{\bf mpw} $\ast$}]{result, } \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata, } \item[{{\bf mpw} $\ast$}]{wksp} \end{DoxyParamCaption} )}} \label{mp_8h_af2f708ed3c44a665a0024b11dc8e2817} \hypertarget{mp_8h_ae661ccc4c37b796f4671f882e71c9cc4}{ \index{mp.h@{mp.h}!mpne@{mpne}} \index{mpne@{mpne}!mp.h@{mp.h}} \subsubsection[{mpne}]{\setlength{\rightskip}{0pt plus 5cm}int mpne ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_ae661ccc4c37b796f4671f882e71c9cc4} This function tests if two multi-\/precision integers of the same size differ. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if not equal \\ \hline {\em 0} & if equal \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a5f26c9e232c74bacea5ae785692de1d4}{ \index{mp.h@{mp.h}!mpneg@{mpneg}} \index{mpneg@{mpneg}!mp.h@{mp.h}} \subsubsection[{mpneg}]{\setlength{\rightskip}{0pt plus 5cm}void mpneg ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a5f26c9e232c74bacea5ae785692de1d4} This function negates a multi-\/precision integer. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_abecba2b8f414da05ee7c9959ac72acb1}{ \index{mp.h@{mp.h}!mpnex@{mpnex}} \index{mpnex@{mpnex}!mp.h@{mp.h}} \subsubsection[{mpnex}]{\setlength{\rightskip}{0pt plus 5cm}int mpnex ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{const {\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_abecba2b8f414da05ee7c9959ac72acb1} This function tests if two multi-\/precision integers of different size are equal. \begin{DoxyParams}{Parameters} {\em xsize} & The size of the first multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ysize} & The size of the first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if equal \\ \hline {\em 0} & if not equal \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a0b54adf94eaee674a4e3490b30a2f954}{ \index{mp.h@{mp.h}!mpnorm@{mpnorm}} \index{mpnorm@{mpnorm}!mp.h@{mp.h}} \subsubsection[{mpnorm}]{\setlength{\rightskip}{0pt plus 5cm}size\_\-t mpnorm ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a0b54adf94eaee674a4e3490b30a2f954} \hypertarget{mp_8h_ad0c8185589374810679c5a0cbbe3e0ca}{ \index{mp.h@{mp.h}!mpnot@{mpnot}} \index{mpnot@{mpnot}!mp.h@{mp.h}} \subsubsection[{mpnot}]{\setlength{\rightskip}{0pt plus 5cm}mpnot ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ad0c8185589374810679c5a0cbbe3e0ca} This function flips all bits of a multi-\/precision integer. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_ade7306885f5508bc52954f6be8820558}{ \index{mp.h@{mp.h}!mpnz@{mpnz}} \index{mpnz@{mpnz}!mp.h@{mp.h}} \subsubsection[{mpnz}]{\setlength{\rightskip}{0pt plus 5cm}int mpnz ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ade7306885f5508bc52954f6be8820558} This function tests if a multi-\/precision integer is not zero. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if not zero \\ \hline {\em 0} & if zero \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_a70c9ff9c0f765307214fb28d22cc2c23}{ \index{mp.h@{mp.h}!mpodd@{mpodd}} \index{mpodd@{mpodd}!mp.h@{mp.h}} \subsubsection[{mpodd}]{\setlength{\rightskip}{0pt plus 5cm}int mpodd ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a70c9ff9c0f765307214fb28d22cc2c23} This functions tests if a multi-\/precision integer is odd. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if odd \\ \hline {\em 0} & if even \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_aa1baaac1e8919a218b2369355a8c1c63}{ \index{mp.h@{mp.h}!mpor@{mpor}} \index{mpor@{mpor}!mp.h@{mp.h}} \subsubsection[{mpor}]{\setlength{\rightskip}{0pt plus 5cm}void mpor ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_aa1baaac1e8919a218b2369355a8c1c63} This function computes the bit-\/wise OR of two multi-\/precision integers. Modifies xdata. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em xdata} & The multi-\/precision integer data. \\ \hline {\em ydata} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_a0f56eafb94580fd8d838ae86a3a4e6f7}{ \index{mp.h@{mp.h}!mppndiv@{mppndiv}} \index{mppndiv@{mppndiv}!mp.h@{mp.h}} \subsubsection[{mppndiv}]{\setlength{\rightskip}{0pt plus 5cm}{\bf mpw} mppndiv ( \begin{DoxyParamCaption} \item[{{\bf mpw}}]{xhi, } \item[{{\bf mpw}}]{xlo, } \item[{{\bf mpw}}]{y} \end{DoxyParamCaption} )}} \label{mp_8h_a0f56eafb94580fd8d838ae86a3a4e6f7} \hypertarget{mp_8h_ac1b16cee4b287487d5fde0f423b1f8e5}{ \index{mp.h@{mp.h}!mpprint@{mpprint}} \index{mpprint@{mpprint}!mp.h@{mp.h}} \subsubsection[{mpprint}]{\setlength{\rightskip}{0pt plus 5cm}void mpprint ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ac1b16cee4b287487d5fde0f423b1f8e5} \hypertarget{mp_8h_ae3dcf4ff639792019af97bfb9585107a}{ \index{mp.h@{mp.h}!mpprintln@{mpprintln}} \index{mpprintln@{mpprintln}!mp.h@{mp.h}} \subsubsection[{mpprintln}]{\setlength{\rightskip}{0pt plus 5cm}void mpprintln ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ae3dcf4ff639792019af97bfb9585107a} \hypertarget{mp_8h_acbbc33f1d523347abbea10b755822c05}{ \index{mp.h@{mp.h}!mprshift@{mprshift}} \index{mprshift@{mprshift}!mp.h@{mp.h}} \subsubsection[{mprshift}]{\setlength{\rightskip}{0pt plus 5cm}void mprshift ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data, } \item[{size\_\-t}]{count} \end{DoxyParamCaption} )}} \label{mp_8h_acbbc33f1d523347abbea10b755822c05} \hypertarget{mp_8h_a2ce894dd95d1f2e82a8afcc75fffaa9c}{ \index{mp.h@{mp.h}!mprshiftlsz@{mprshiftlsz}} \index{mprshiftlsz@{mprshiftlsz}!mp.h@{mp.h}} \subsubsection[{mprshiftlsz}]{\setlength{\rightskip}{0pt plus 5cm}size\_\-t mprshiftlsz ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a2ce894dd95d1f2e82a8afcc75fffaa9c} \hypertarget{mp_8h_a9267926999bef7cfae96f50ec8fa7bd6}{ \index{mp.h@{mp.h}!mpsdivtwo@{mpsdivtwo}} \index{mpsdivtwo@{mpsdivtwo}!mp.h@{mp.h}} \subsubsection[{mpsdivtwo}]{\setlength{\rightskip}{0pt plus 5cm}void mpsdivtwo ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a9267926999bef7cfae96f50ec8fa7bd6} \hypertarget{mp_8h_ac4ccde3ff8c2aac9e324fb0832e28e1a}{ \index{mp.h@{mp.h}!mpsetlsb@{mpsetlsb}} \index{mpsetlsb@{mpsetlsb}!mp.h@{mp.h}} \subsubsection[{mpsetlsb}]{\setlength{\rightskip}{0pt plus 5cm}void mpsetlsb ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ac4ccde3ff8c2aac9e324fb0832e28e1a} This function sets the least significant bit of a multi-\/precision integer. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_ab3a5821696b1b13a84d6648332ba6cf7}{ \index{mp.h@{mp.h}!mpsetmsb@{mpsetmsb}} \index{mpsetmsb@{mpsetmsb}!mp.h@{mp.h}} \subsubsection[{mpsetmsb}]{\setlength{\rightskip}{0pt plus 5cm}void mpsetmsb ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ab3a5821696b1b13a84d6648332ba6cf7} This function sets the most significant bit of a multi-\/precision integer. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_a659c97a015a63a4405c9a45e6a1b49e6}{ \index{mp.h@{mp.h}!mpsetmul@{mpsetmul}} \index{mpsetmul@{mpsetmul}!mp.h@{mp.h}} \subsubsection[{mpsetmul}]{\setlength{\rightskip}{0pt plus 5cm}{\bf mpw} mpsetmul ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{result, } \item[{const {\bf mpw} $\ast$}]{data, } \item[{{\bf mpw}}]{y} \end{DoxyParamCaption} )}} \label{mp_8h_a659c97a015a63a4405c9a45e6a1b49e6} 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. \begin{DoxyParams}{Parameters} {\em size} & The size of multi-\/precision integer multiplier. \\ \hline {\em result} & The place where result will be accumulated. \\ \hline {\em data} & The multi-\/precision integer multiplier. \\ \hline {\em y} & The multiplicand. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} The carry-\/over multi-\/precision word. \end{DoxyReturn} \hypertarget{mp_8h_ad9f0efe339edc592551911ba2216e8cd}{ \index{mp.h@{mp.h}!mpsetw@{mpsetw}} \index{mpsetw@{mpsetw}!mp.h@{mp.h}} \subsubsection[{mpsetw}]{\setlength{\rightskip}{0pt plus 5cm}void mpsetw ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{{\bf mpw}}]{y} \end{DoxyParamCaption} )}} \label{mp_8h_ad9f0efe339edc592551911ba2216e8cd} 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. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em xdata} & The multi-\/precision integer data. \\ \hline {\em y} & The value to be assigned. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_aa6dec413795f2d0138d09cb640dc81df}{ \index{mp.h@{mp.h}!mpsetws@{mpsetws}} \index{mpsetws@{mpsetws}!mp.h@{mp.h}} \subsubsection[{mpsetws}]{\setlength{\rightskip}{0pt plus 5cm}void mpsetws ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{y} \end{DoxyParamCaption} )}} \label{mp_8h_aa6dec413795f2d0138d09cb640dc81df} This function sets the value of a multi-\/precision integer to the given word. The given value is copied into the least significant word(s), while the most significant words are zeroed. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em xdata} & The multi-\/precision integer data. \\ \hline {\em y} & The value. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_af94f0424014578a78d77c2084f3f3d5d}{ \index{mp.h@{mp.h}!mpsetx@{mpsetx}} \index{mpsetx@{mpsetx}!mp.h@{mp.h}} \subsubsection[{mpsetx}]{\setlength{\rightskip}{0pt plus 5cm}void mpsetx ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_af94f0424014578a78d77c2084f3f3d5d} 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. \begin{DoxyParams}{Parameters} {\em xsize} & The size of the first multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ysize} & The size of the second multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_a5847c378eda16688587b23753b65e972}{ \index{mp.h@{mp.h}!mpsize@{mpsize}} \index{mpsize@{mpsize}!mp.h@{mp.h}} \subsubsection[{mpsize}]{\setlength{\rightskip}{0pt plus 5cm}size\_\-t mpsize ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a5847c378eda16688587b23753b65e972} This function returns the true size of a multi-\/precision integer, after stripping leading zero words. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_a7703ab7d9b0b2b4f1ebc6f7415029c9b}{ \index{mp.h@{mp.h}!mpsqr@{mpsqr}} \index{mpsqr@{mpsqr}!mp.h@{mp.h}} \subsubsection[{mpsqr}]{\setlength{\rightskip}{0pt plus 5cm}void mpsqr ( \begin{DoxyParamCaption} \item[{{\bf mpw} $\ast$}]{result, } \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_a7703ab7d9b0b2b4f1ebc6f7415029c9b} This function computes a full multi-\/precision square. \hypertarget{mp_8h_a49e790df163e11d7230d81bbc8d5fde2}{ \index{mp.h@{mp.h}!mpsub@{mpsub}} \index{mpsub@{mpsub}!mp.h@{mp.h}} \subsubsection[{mpsub}]{\setlength{\rightskip}{0pt plus 5cm}int mpsub ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_a49e790df163e11d7230d81bbc8d5fde2} This function subtracts two multi-\/precision integers of equal size. The performed operation in pseudocode: x -\/= y. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} The carry-\/over value of the operation; this value is either 0 or 1. \end{DoxyReturn} \hypertarget{mp_8h_a5814eb1185a0dc05da2f86323f5c8978}{ \index{mp.h@{mp.h}!mpsubw@{mpsubw}} \index{mpsubw@{mpsubw}!mp.h@{mp.h}} \subsubsection[{mpsubw}]{\setlength{\rightskip}{0pt plus 5cm}int mpsubw ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{{\bf mpw}}]{y} \end{DoxyParamCaption} )}} \label{mp_8h_a5814eb1185a0dc05da2f86323f5c8978} This function subtracts one word to a multi-\/precision integer. The performed operation in pseudocode: x -\/= y. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integers. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em y} & The multi-\/precision word. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} The carry-\/over value of the operation; this value is either 0 or 1. \end{DoxyReturn} \hypertarget{mp_8h_ae77b6a530198f3d8b3d9005b7cbcc0e5}{ \index{mp.h@{mp.h}!mpsubx@{mpsubx}} \index{mpsubx@{mpsubx}!mp.h@{mp.h}} \subsubsection[{mpsubx}]{\setlength{\rightskip}{0pt plus 5cm}int mpsubx ( \begin{DoxyParamCaption} \item[{size\_\-t}]{xsize, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{size\_\-t}]{ysize, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_ae77b6a530198f3d8b3d9005b7cbcc0e5} This function subtracts two multi-\/precision integers of different size. The performed operation in pseudocode: x -\/= y. \begin{DoxyParams}{Parameters} {\em xsize} & The size of the first multi-\/precision integer. \\ \hline {\em xdata} & The first multi-\/precision integer. \\ \hline {\em ysize} & The size of the second multi-\/precision integer. \\ \hline {\em ydata} & The second multi-\/precision integer. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} The carry-\/over value of the operation; this value is either 0 or 1. \end{DoxyReturn} \hypertarget{mp_8h_a6373a586b0e90cb78179143c89de4132}{ \index{mp.h@{mp.h}!mpxor@{mpxor}} \index{mpxor@{mpxor}!mp.h@{mp.h}} \subsubsection[{mpxor}]{\setlength{\rightskip}{0pt plus 5cm}void mpxor ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{xdata, } \item[{const {\bf mpw} $\ast$}]{ydata} \end{DoxyParamCaption} )}} \label{mp_8h_a6373a586b0e90cb78179143c89de4132} This function computes the bit-\/wise XOR of two multi-\/precision integers. Modifies xdata. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em xdata} & The multi-\/precision integer data. \\ \hline {\em ydata} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_aa849fd262347ab62ea3b1bf4afbf7c7c}{ \index{mp.h@{mp.h}!mpz@{mpz}} \index{mpz@{mpz}!mp.h@{mp.h}} \subsubsection[{mpz}]{\setlength{\rightskip}{0pt plus 5cm}int mpz ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{const {\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_aa849fd262347ab62ea3b1bf4afbf7c7c} This function tests if a multi-\/precision integer is zero. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \begin{DoxyRetVals}{Return values} {\em 1} & if zero \\ \hline {\em 0} & if not zero \\ \hline \end{DoxyRetVals} \hypertarget{mp_8h_ae9fd060d4b6ce84404107a1523f34276}{ \index{mp.h@{mp.h}!mpzero@{mpzero}} \index{mpzero@{mpzero}!mp.h@{mp.h}} \subsubsection[{mpzero}]{\setlength{\rightskip}{0pt plus 5cm}void mpzero ( \begin{DoxyParamCaption} \item[{size\_\-t}]{size, } \item[{{\bf mpw} $\ast$}]{data} \end{DoxyParamCaption} )}} \label{mp_8h_ae9fd060d4b6ce84404107a1523f34276} This function zeroes a multi-\/precision integer of a given size. \begin{DoxyParams}{Parameters} {\em size} & The size of the multi-\/precision integer. \\ \hline {\em data} & The multi-\/precision integer data. \\ \hline \end{DoxyParams} \hypertarget{mp_8h_a2e26b9c3109b8a41a8c87bcfe1dfbfc8}{ \index{mp.h@{mp.h}!os2ip@{os2ip}} \index{os2ip@{os2ip}!mp.h@{mp.h}} \subsubsection[{os2ip}]{\setlength{\rightskip}{0pt plus 5cm}int os2ip ( \begin{DoxyParamCaption} \item[{{\bf mpw} $\ast$}]{idata, } \item[{size\_\-t}]{isize, } \item[{const {\bf byte} $\ast$}]{osdata, } \item[{size\_\-t}]{ossize} \end{DoxyParamCaption} )}} \label{mp_8h_a2e26b9c3109b8a41a8c87bcfe1dfbfc8}