Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 9e72f3e7ecf68cce016a7c5c59e863d3 > files > 130

lib64polarssl-devel-1.3.8-1.mga4.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>PolarSSL v1.3.8: bignum.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">PolarSSL v1.3.8
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_6a9bbd12bf4e19a18c45e270f8fae3fd.html">include</a></li><li class="navelem"><a class="el" href="dir_04272d44da4745cf8b8bfc767d6c6523.html">polarssl</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">bignum.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Multi-precision integer library.  
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br/>
<code>#include &lt;string.h&gt;</code><br/>
<code>#include &quot;<a class="el" href="config_8h_source.html">config.h</a>&quot;</code><br/>
<code>#include &lt;inttypes.h&gt;</code><br/>
</div><div class="textblock"><div class="dynheader">
Include dependency graph for bignum.h:</div>
<div class="dyncontent">
<div class="center"><img src="bignum_8h__incl.png" border="0" usemap="#bignum_8h" alt=""/></div>
<map name="bignum_8h" id="bignum_8h">
</map>
</div>
</div><div class="textblock"><div class="dynheader">
This graph shows which files directly or indirectly include this file:</div>
<div class="dyncontent">
<div class="center"><img src="bignum_8h__dep__incl.png" border="0" usemap="#bignum_8hdep" alt=""/></div>
<map name="bignum_8hdep" id="bignum_8hdep">
</map>
</div>
</div>
<p><a href="bignum_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmpi.html">mpi</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">MPI structure.  <a href="structmpi.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a4f10c6e250b7a06f2fc01ce48a823fc8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a4f10c6e250b7a06f2fc01ce48a823fc8">POLARSSL_ERR_MPI_FILE_IO_ERROR</a>&#160;&#160;&#160;-0x0002</td></tr>
<tr class="memdesc:a4f10c6e250b7a06f2fc01ce48a823fc8"><td class="mdescLeft">&#160;</td><td class="mdescRight">An error occurred while reading from or writing to a file.  <a href="#a4f10c6e250b7a06f2fc01ce48a823fc8">More...</a><br/></td></tr>
<tr class="separator:a4f10c6e250b7a06f2fc01ce48a823fc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad5959617396031440786cd8ff24712a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aad5959617396031440786cd8ff24712a">POLARSSL_ERR_MPI_BAD_INPUT_DATA</a>&#160;&#160;&#160;-0x0004</td></tr>
<tr class="memdesc:aad5959617396031440786cd8ff24712a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bad input parameters to function.  <a href="#aad5959617396031440786cd8ff24712a">More...</a><br/></td></tr>
<tr class="separator:aad5959617396031440786cd8ff24712a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2d758961ae9e4085d2a43588ecb782a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#af2d758961ae9e4085d2a43588ecb782a">POLARSSL_ERR_MPI_INVALID_CHARACTER</a>&#160;&#160;&#160;-0x0006</td></tr>
<tr class="memdesc:af2d758961ae9e4085d2a43588ecb782a"><td class="mdescLeft">&#160;</td><td class="mdescRight">There is an invalid character in the digit string.  <a href="#af2d758961ae9e4085d2a43588ecb782a">More...</a><br/></td></tr>
<tr class="separator:af2d758961ae9e4085d2a43588ecb782a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0139fd8e0536a4bd1da18c9ea5bcb84"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ab0139fd8e0536a4bd1da18c9ea5bcb84">POLARSSL_ERR_MPI_BUFFER_TOO_SMALL</a>&#160;&#160;&#160;-0x0008</td></tr>
<tr class="memdesc:ab0139fd8e0536a4bd1da18c9ea5bcb84"><td class="mdescLeft">&#160;</td><td class="mdescRight">The buffer is too small to write to.  <a href="#ab0139fd8e0536a4bd1da18c9ea5bcb84">More...</a><br/></td></tr>
<tr class="separator:ab0139fd8e0536a4bd1da18c9ea5bcb84"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afbbffbd20b56d2b8f3db8edf76cdbdb4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#afbbffbd20b56d2b8f3db8edf76cdbdb4">POLARSSL_ERR_MPI_NEGATIVE_VALUE</a>&#160;&#160;&#160;-0x000A</td></tr>
<tr class="memdesc:afbbffbd20b56d2b8f3db8edf76cdbdb4"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input arguments are negative or result in illegal output.  <a href="#afbbffbd20b56d2b8f3db8edf76cdbdb4">More...</a><br/></td></tr>
<tr class="separator:afbbffbd20b56d2b8f3db8edf76cdbdb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96380f09df1ad46baba97af000b05466"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a96380f09df1ad46baba97af000b05466">POLARSSL_ERR_MPI_DIVISION_BY_ZERO</a>&#160;&#160;&#160;-0x000C</td></tr>
<tr class="memdesc:a96380f09df1ad46baba97af000b05466"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input argument for division is zero, which is not allowed.  <a href="#a96380f09df1ad46baba97af000b05466">More...</a><br/></td></tr>
<tr class="separator:a96380f09df1ad46baba97af000b05466"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac42cb2c2b13df48182ee833de2e4adbf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ac42cb2c2b13df48182ee833de2e4adbf">POLARSSL_ERR_MPI_NOT_ACCEPTABLE</a>&#160;&#160;&#160;-0x000E</td></tr>
<tr class="memdesc:ac42cb2c2b13df48182ee833de2e4adbf"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input arguments are not acceptable.  <a href="#ac42cb2c2b13df48182ee833de2e4adbf">More...</a><br/></td></tr>
<tr class="separator:ac42cb2c2b13df48182ee833de2e4adbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad288a13737d14f102748c3184ed5a494"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ad288a13737d14f102748c3184ed5a494">POLARSSL_ERR_MPI_MALLOC_FAILED</a>&#160;&#160;&#160;-0x0010</td></tr>
<tr class="memdesc:ad288a13737d14f102748c3184ed5a494"><td class="mdescLeft">&#160;</td><td class="mdescRight">Memory allocation failed.  <a href="#ad288a13737d14f102748c3184ed5a494">More...</a><br/></td></tr>
<tr class="separator:ad288a13737d14f102748c3184ed5a494"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a024b186dd3608bcbcfc9dd36212a18ec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a024b186dd3608bcbcfc9dd36212a18ec">MPI_CHK</a>(f)&#160;&#160;&#160;do { if( ( ret = f ) != 0 ) goto cleanup; } while( 0 )</td></tr>
<tr class="separator:a024b186dd3608bcbcfc9dd36212a18ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8ee0afd7c8a22f13aaa70d3c812e81f7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a8ee0afd7c8a22f13aaa70d3c812e81f7">POLARSSL_MPI_MAX_LIMBS</a>&#160;&#160;&#160;10000</td></tr>
<tr class="separator:a8ee0afd7c8a22f13aaa70d3c812e81f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5eb26ce753f5110fd69713ea976fd63e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a5eb26ce753f5110fd69713ea976fd63e">POLARSSL_MPI_WINDOW_SIZE</a>&#160;&#160;&#160;6</td></tr>
<tr class="memdesc:a5eb26ce753f5110fd69713ea976fd63e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum windows size used.  <a href="#a5eb26ce753f5110fd69713ea976fd63e">More...</a><br/></td></tr>
<tr class="separator:a5eb26ce753f5110fd69713ea976fd63e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae43600df723c0b882201f556c028b1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aae43600df723c0b882201f556c028b1f">POLARSSL_MPI_MAX_SIZE</a>&#160;&#160;&#160;512</td></tr>
<tr class="memdesc:aae43600df723c0b882201f556c028b1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum number of bytes for usable MPIs.  <a href="#aae43600df723c0b882201f556c028b1f">More...</a><br/></td></tr>
<tr class="separator:aae43600df723c0b882201f556c028b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca6ca30059eab25954ebb962a8b69c52"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aca6ca30059eab25954ebb962a8b69c52">POLARSSL_MPI_MAX_BITS</a>&#160;&#160;&#160;( 8 * <a class="el" href="bignum_8h.html#aae43600df723c0b882201f556c028b1f">POLARSSL_MPI_MAX_SIZE</a> )</td></tr>
<tr class="memdesc:aca6ca30059eab25954ebb962a8b69c52"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum number of bits for usable MPIs.  <a href="#aca6ca30059eab25954ebb962a8b69c52">More...</a><br/></td></tr>
<tr class="separator:aca6ca30059eab25954ebb962a8b69c52"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2146744fdaa3abf5ee13918c2d5268b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ac2146744fdaa3abf5ee13918c2d5268b">POLARSSL_MPI_MAX_BITS_SCALE100</a>&#160;&#160;&#160;( 100 * <a class="el" href="bignum_8h.html#aca6ca30059eab25954ebb962a8b69c52">POLARSSL_MPI_MAX_BITS</a> )</td></tr>
<tr class="separator:ac2146744fdaa3abf5ee13918c2d5268b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97c90562c6192dfc2b8cf38152e1fa4b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a97c90562c6192dfc2b8cf38152e1fa4b">LN_2_DIV_LN_10_SCALE100</a>&#160;&#160;&#160;332</td></tr>
<tr class="separator:a97c90562c6192dfc2b8cf38152e1fa4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a728c03b4fdb0f4e9e84a5488adf1c5d0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a728c03b4fdb0f4e9e84a5488adf1c5d0">POLARSSL_MPI_RW_BUFFER_SIZE</a>&#160;&#160;&#160;( ((<a class="el" href="bignum_8h.html#ac2146744fdaa3abf5ee13918c2d5268b">POLARSSL_MPI_MAX_BITS_SCALE100</a> + <a class="el" href="bignum_8h.html#a97c90562c6192dfc2b8cf38152e1fa4b">LN_2_DIV_LN_10_SCALE100</a> - 1) / <a class="el" href="bignum_8h.html#a97c90562c6192dfc2b8cf38152e1fa4b">LN_2_DIV_LN_10_SCALE100</a>) + 10 + 6 )</td></tr>
<tr class="separator:a728c03b4fdb0f4e9e84a5488adf1c5d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa32170d1fc407e0be9ddbce62871c74"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aaa32170d1fc407e0be9ddbce62871c74">POLARSSL_HAVE_INT32</a></td></tr>
<tr class="separator:aaa32170d1fc407e0be9ddbce62871c74"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f497e14fe66e1d321e4edb73126908b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a4f497e14fe66e1d321e4edb73126908b">POLARSSL_HAVE_UDBL</a></td></tr>
<tr class="separator:a4f497e14fe66e1d321e4edb73126908b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:abbc933ccc2d1d02925e6886d9b4f5873"><td class="memItemLeft" align="right" valign="top">typedef int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a></td></tr>
<tr class="separator:abbc933ccc2d1d02925e6886d9b4f5873"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5d1464f801a0e7d2ed32a8f8dc2ccc9"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a></td></tr>
<tr class="separator:ad5d1464f801a0e7d2ed32a8f8dc2ccc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15c9839c39da2a8dc13255a226d05d87"><td class="memItemLeft" align="right" valign="top">typedef unsigned long long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a15c9839c39da2a8dc13255a226d05d87">t_udbl</a></td></tr>
<tr class="separator:a15c9839c39da2a8dc13255a226d05d87"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a201666869f65225d6535bcc697f95c9b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a201666869f65225d6535bcc697f95c9b">mpi_init</a> (<a class="el" href="structmpi.html">mpi</a> *X)</td></tr>
<tr class="memdesc:a201666869f65225d6535bcc697f95c9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize one MPI.  <a href="#a201666869f65225d6535bcc697f95c9b">More...</a><br/></td></tr>
<tr class="separator:a201666869f65225d6535bcc697f95c9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae1f6507671587755e46bbf0afcae6a8c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ae1f6507671587755e46bbf0afcae6a8c">mpi_free</a> (<a class="el" href="structmpi.html">mpi</a> *X)</td></tr>
<tr class="memdesc:ae1f6507671587755e46bbf0afcae6a8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unallocate one MPI.  <a href="#ae1f6507671587755e46bbf0afcae6a8c">More...</a><br/></td></tr>
<tr class="separator:ae1f6507671587755e46bbf0afcae6a8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac585f00fc9be270de074e8fbfb508d6a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ac585f00fc9be270de074e8fbfb508d6a">mpi_grow</a> (<a class="el" href="structmpi.html">mpi</a> *X, size_t nblimbs)</td></tr>
<tr class="memdesc:ac585f00fc9be270de074e8fbfb508d6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enlarge to the specified number of limbs.  <a href="#ac585f00fc9be270de074e8fbfb508d6a">More...</a><br/></td></tr>
<tr class="separator:ac585f00fc9be270de074e8fbfb508d6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adaa24d645b3940d17fb6ac1d6fd17408"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#adaa24d645b3940d17fb6ac1d6fd17408">mpi_shrink</a> (<a class="el" href="structmpi.html">mpi</a> *X, size_t nblimbs)</td></tr>
<tr class="memdesc:adaa24d645b3940d17fb6ac1d6fd17408"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resize down, keeping at least the specified number of limbs.  <a href="#adaa24d645b3940d17fb6ac1d6fd17408">More...</a><br/></td></tr>
<tr class="separator:adaa24d645b3940d17fb6ac1d6fd17408"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fbcce39a9d92d9e2a560f8aa6a810f4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a6fbcce39a9d92d9e2a560f8aa6a810f4">mpi_copy</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *Y)</td></tr>
<tr class="memdesc:a6fbcce39a9d92d9e2a560f8aa6a810f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy the contents of Y into X.  <a href="#a6fbcce39a9d92d9e2a560f8aa6a810f4">More...</a><br/></td></tr>
<tr class="separator:a6fbcce39a9d92d9e2a560f8aa6a810f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5456193a9ebcfe612b93cfb509995a75"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a5456193a9ebcfe612b93cfb509995a75">mpi_swap</a> (<a class="el" href="structmpi.html">mpi</a> *X, <a class="el" href="structmpi.html">mpi</a> *Y)</td></tr>
<tr class="memdesc:a5456193a9ebcfe612b93cfb509995a75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap the contents of X and Y.  <a href="#a5456193a9ebcfe612b93cfb509995a75">More...</a><br/></td></tr>
<tr class="separator:a5456193a9ebcfe612b93cfb509995a75"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4022aef0c79b5a7121ee294cc139ae12"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a4022aef0c79b5a7121ee294cc139ae12">mpi_safe_cond_assign</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *Y, unsigned char assign)</td></tr>
<tr class="memdesc:a4022aef0c79b5a7121ee294cc139ae12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Safe conditional assignement X = Y if assign is 1.  <a href="#a4022aef0c79b5a7121ee294cc139ae12">More...</a><br/></td></tr>
<tr class="separator:a4022aef0c79b5a7121ee294cc139ae12"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9128b59005aad61e8d07bedd0c2973b7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a9128b59005aad61e8d07bedd0c2973b7">mpi_safe_cond_swap</a> (<a class="el" href="structmpi.html">mpi</a> *X, <a class="el" href="structmpi.html">mpi</a> *Y, unsigned char assign)</td></tr>
<tr class="memdesc:a9128b59005aad61e8d07bedd0c2973b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Safe conditional swap X &lt;-&gt; Y if swap is 1.  <a href="#a9128b59005aad61e8d07bedd0c2973b7">More...</a><br/></td></tr>
<tr class="separator:a9128b59005aad61e8d07bedd0c2973b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a007d6236aebb0ff4a3d92ce8f525a3ae"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a007d6236aebb0ff4a3d92ce8f525a3ae">mpi_lset</a> (<a class="el" href="structmpi.html">mpi</a> *X, <a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a> z)</td></tr>
<tr class="memdesc:a007d6236aebb0ff4a3d92ce8f525a3ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set value from integer.  <a href="#a007d6236aebb0ff4a3d92ce8f525a3ae">More...</a><br/></td></tr>
<tr class="separator:a007d6236aebb0ff4a3d92ce8f525a3ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a920345ada5c75a913b32a00fed3bd36c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a920345ada5c75a913b32a00fed3bd36c">mpi_get_bit</a> (const <a class="el" href="structmpi.html">mpi</a> *X, size_t pos)</td></tr>
<tr class="memdesc:a920345ada5c75a913b32a00fed3bd36c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a specific bit from X.  <a href="#a920345ada5c75a913b32a00fed3bd36c">More...</a><br/></td></tr>
<tr class="separator:a920345ada5c75a913b32a00fed3bd36c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac70dd057e989b021c4a535470d6afec9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ac70dd057e989b021c4a535470d6afec9">mpi_set_bit</a> (<a class="el" href="structmpi.html">mpi</a> *X, size_t pos, unsigned char val)</td></tr>
<tr class="memdesc:ac70dd057e989b021c4a535470d6afec9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set a bit of X to a specific value of 0 or 1.  <a href="#ac70dd057e989b021c4a535470d6afec9">More...</a><br/></td></tr>
<tr class="separator:ac70dd057e989b021c4a535470d6afec9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6d6079272ffa625501f58127172a4f53"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a6d6079272ffa625501f58127172a4f53">mpi_lsb</a> (const <a class="el" href="structmpi.html">mpi</a> *X)</td></tr>
<tr class="memdesc:a6d6079272ffa625501f58127172a4f53"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the number of zero-bits before the least significant '1' bit.  <a href="#a6d6079272ffa625501f58127172a4f53">More...</a><br/></td></tr>
<tr class="separator:a6d6079272ffa625501f58127172a4f53"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d461a7bff5a31df34bbf93ec00ab886"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a4d461a7bff5a31df34bbf93ec00ab886">mpi_msb</a> (const <a class="el" href="structmpi.html">mpi</a> *X)</td></tr>
<tr class="memdesc:a4d461a7bff5a31df34bbf93ec00ab886"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the number of bits up to and including the most significant '1' bit'.  <a href="#a4d461a7bff5a31df34bbf93ec00ab886">More...</a><br/></td></tr>
<tr class="separator:a4d461a7bff5a31df34bbf93ec00ab886"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8aa3a3d3aac9e49879ea8cd308859d23"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a8aa3a3d3aac9e49879ea8cd308859d23">mpi_size</a> (const <a class="el" href="structmpi.html">mpi</a> *X)</td></tr>
<tr class="memdesc:a8aa3a3d3aac9e49879ea8cd308859d23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the total size in bytes.  <a href="#a8aa3a3d3aac9e49879ea8cd308859d23">More...</a><br/></td></tr>
<tr class="separator:a8aa3a3d3aac9e49879ea8cd308859d23"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a752d12c301f4e5df56f17e9bc8d78d74"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a752d12c301f4e5df56f17e9bc8d78d74">mpi_read_string</a> (<a class="el" href="structmpi.html">mpi</a> *X, int radix, const char *s)</td></tr>
<tr class="memdesc:a752d12c301f4e5df56f17e9bc8d78d74"><td class="mdescLeft">&#160;</td><td class="mdescRight">Import from an ASCII string.  <a href="#a752d12c301f4e5df56f17e9bc8d78d74">More...</a><br/></td></tr>
<tr class="separator:a752d12c301f4e5df56f17e9bc8d78d74"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac4c8bb7bf5d700277d27b03aed0df7a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aac4c8bb7bf5d700277d27b03aed0df7a">mpi_write_string</a> (const <a class="el" href="structmpi.html">mpi</a> *X, int radix, char *s, size_t *slen)</td></tr>
<tr class="memdesc:aac4c8bb7bf5d700277d27b03aed0df7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export into an ASCII string.  <a href="#aac4c8bb7bf5d700277d27b03aed0df7a">More...</a><br/></td></tr>
<tr class="separator:aac4c8bb7bf5d700277d27b03aed0df7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3305289daa8dcc9e70fade0eaa1dc99"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aa3305289daa8dcc9e70fade0eaa1dc99">mpi_read_file</a> (<a class="el" href="structmpi.html">mpi</a> *X, int radix, FILE *fin)</td></tr>
<tr class="memdesc:aa3305289daa8dcc9e70fade0eaa1dc99"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read X from an opened file.  <a href="#aa3305289daa8dcc9e70fade0eaa1dc99">More...</a><br/></td></tr>
<tr class="separator:aa3305289daa8dcc9e70fade0eaa1dc99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6388b8b831a59ae43668857f43e1a907"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a6388b8b831a59ae43668857f43e1a907">mpi_write_file</a> (const char *p, const <a class="el" href="structmpi.html">mpi</a> *X, int radix, FILE *fout)</td></tr>
<tr class="memdesc:a6388b8b831a59ae43668857f43e1a907"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write X into an opened file, or stdout if fout is NULL.  <a href="#a6388b8b831a59ae43668857f43e1a907">More...</a><br/></td></tr>
<tr class="separator:a6388b8b831a59ae43668857f43e1a907"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0235008cccbf00b8bc03699de8094819"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a0235008cccbf00b8bc03699de8094819">mpi_read_binary</a> (<a class="el" href="structmpi.html">mpi</a> *X, const unsigned char *buf, size_t buflen)</td></tr>
<tr class="memdesc:a0235008cccbf00b8bc03699de8094819"><td class="mdescLeft">&#160;</td><td class="mdescRight">Import X from unsigned binary data, big endian.  <a href="#a0235008cccbf00b8bc03699de8094819">More...</a><br/></td></tr>
<tr class="separator:a0235008cccbf00b8bc03699de8094819"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d464b4312859ce4969d114eb5e02741"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a5d464b4312859ce4969d114eb5e02741">mpi_write_binary</a> (const <a class="el" href="structmpi.html">mpi</a> *X, unsigned char *buf, size_t buflen)</td></tr>
<tr class="memdesc:a5d464b4312859ce4969d114eb5e02741"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export X into unsigned binary data, big endian.  <a href="#a5d464b4312859ce4969d114eb5e02741">More...</a><br/></td></tr>
<tr class="separator:a5d464b4312859ce4969d114eb5e02741"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a17537330dbe685ca867e52479a8ef7c3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a17537330dbe685ca867e52479a8ef7c3">mpi_shift_l</a> (<a class="el" href="structmpi.html">mpi</a> *X, size_t count)</td></tr>
<tr class="memdesc:a17537330dbe685ca867e52479a8ef7c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Left-shift: X &lt;&lt;= count.  <a href="#a17537330dbe685ca867e52479a8ef7c3">More...</a><br/></td></tr>
<tr class="separator:a17537330dbe685ca867e52479a8ef7c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a01de1543da79d0ad0f58916d608f6ff8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a01de1543da79d0ad0f58916d608f6ff8">mpi_shift_r</a> (<a class="el" href="structmpi.html">mpi</a> *X, size_t count)</td></tr>
<tr class="memdesc:a01de1543da79d0ad0f58916d608f6ff8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Right-shift: X &gt;&gt;= count.  <a href="#a01de1543da79d0ad0f58916d608f6ff8">More...</a><br/></td></tr>
<tr class="separator:a01de1543da79d0ad0f58916d608f6ff8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a692b3d8cd05ae753ab5a39b5634c0a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a6a692b3d8cd05ae753ab5a39b5634c0a">mpi_cmp_abs</a> (const <a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *Y)</td></tr>
<tr class="memdesc:a6a692b3d8cd05ae753ab5a39b5634c0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare unsigned values.  <a href="#a6a692b3d8cd05ae753ab5a39b5634c0a">More...</a><br/></td></tr>
<tr class="separator:a6a692b3d8cd05ae753ab5a39b5634c0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec20dff9d78738e3c80b212df9875b83"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aec20dff9d78738e3c80b212df9875b83">mpi_cmp_mpi</a> (const <a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *Y)</td></tr>
<tr class="memdesc:aec20dff9d78738e3c80b212df9875b83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare signed values.  <a href="#aec20dff9d78738e3c80b212df9875b83">More...</a><br/></td></tr>
<tr class="separator:aec20dff9d78738e3c80b212df9875b83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee6dc030f0fa278c1576c457088b4910"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aee6dc030f0fa278c1576c457088b4910">mpi_cmp_int</a> (const <a class="el" href="structmpi.html">mpi</a> *X, <a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a> z)</td></tr>
<tr class="memdesc:aee6dc030f0fa278c1576c457088b4910"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare signed values.  <a href="#aee6dc030f0fa278c1576c457088b4910">More...</a><br/></td></tr>
<tr class="separator:aee6dc030f0fa278c1576c457088b4910"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d1cf13ed3c825b61e0b04085ec30f40"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a5d1cf13ed3c825b61e0b04085ec30f40">mpi_add_abs</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *B)</td></tr>
<tr class="memdesc:a5d1cf13ed3c825b61e0b04085ec30f40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned addition: X = |A| + |B|.  <a href="#a5d1cf13ed3c825b61e0b04085ec30f40">More...</a><br/></td></tr>
<tr class="separator:a5d1cf13ed3c825b61e0b04085ec30f40"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19d09ef62c09539feb7f9b3045cfb1fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a19d09ef62c09539feb7f9b3045cfb1fe">mpi_sub_abs</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *B)</td></tr>
<tr class="memdesc:a19d09ef62c09539feb7f9b3045cfb1fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned subtraction: X = |A| - |B|.  <a href="#a19d09ef62c09539feb7f9b3045cfb1fe">More...</a><br/></td></tr>
<tr class="separator:a19d09ef62c09539feb7f9b3045cfb1fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf5b20e8d8c0a660e4f59f859a0bee18"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#adf5b20e8d8c0a660e4f59f859a0bee18">mpi_add_mpi</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *B)</td></tr>
<tr class="memdesc:adf5b20e8d8c0a660e4f59f859a0bee18"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed addition: X = A + B.  <a href="#adf5b20e8d8c0a660e4f59f859a0bee18">More...</a><br/></td></tr>
<tr class="separator:adf5b20e8d8c0a660e4f59f859a0bee18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a149a13ed93fddb432fb5edd3126b1186"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a149a13ed93fddb432fb5edd3126b1186">mpi_sub_mpi</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *B)</td></tr>
<tr class="memdesc:a149a13ed93fddb432fb5edd3126b1186"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed subtraction: X = A - B.  <a href="#a149a13ed93fddb432fb5edd3126b1186">More...</a><br/></td></tr>
<tr class="separator:a149a13ed93fddb432fb5edd3126b1186"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b88dbe31d038dfae7f27144984f9ae0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a3b88dbe31d038dfae7f27144984f9ae0">mpi_add_int</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, <a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a> b)</td></tr>
<tr class="memdesc:a3b88dbe31d038dfae7f27144984f9ae0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed addition: X = A + b.  <a href="#a3b88dbe31d038dfae7f27144984f9ae0">More...</a><br/></td></tr>
<tr class="separator:a3b88dbe31d038dfae7f27144984f9ae0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acfdf0f6effb7f976a2f90844c492e160"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#acfdf0f6effb7f976a2f90844c492e160">mpi_sub_int</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, <a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a> b)</td></tr>
<tr class="memdesc:acfdf0f6effb7f976a2f90844c492e160"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed subtraction: X = A - b.  <a href="#acfdf0f6effb7f976a2f90844c492e160">More...</a><br/></td></tr>
<tr class="separator:acfdf0f6effb7f976a2f90844c492e160"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab63bfb07b27db84268491cd7d68bddc0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ab63bfb07b27db84268491cd7d68bddc0">mpi_mul_mpi</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *B)</td></tr>
<tr class="memdesc:ab63bfb07b27db84268491cd7d68bddc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Baseline multiplication: X = A * B.  <a href="#ab63bfb07b27db84268491cd7d68bddc0">More...</a><br/></td></tr>
<tr class="separator:ab63bfb07b27db84268491cd7d68bddc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79ee36f6e38e4de6d24047bd685747b4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a79ee36f6e38e4de6d24047bd685747b4">mpi_mul_int</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, <a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a> b)</td></tr>
<tr class="memdesc:a79ee36f6e38e4de6d24047bd685747b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Baseline multiplication: X = A * b Note: despite the functon signature, b is treated as a t_uint.  <a href="#a79ee36f6e38e4de6d24047bd685747b4">More...</a><br/></td></tr>
<tr class="separator:a79ee36f6e38e4de6d24047bd685747b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0804ce20a4a1cba3e3dcd3ac520b1ffb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a0804ce20a4a1cba3e3dcd3ac520b1ffb">mpi_div_mpi</a> (<a class="el" href="structmpi.html">mpi</a> *Q, <a class="el" href="structmpi.html">mpi</a> *R, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *B)</td></tr>
<tr class="memdesc:a0804ce20a4a1cba3e3dcd3ac520b1ffb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Division by mpi: A = Q * B + R.  <a href="#a0804ce20a4a1cba3e3dcd3ac520b1ffb">More...</a><br/></td></tr>
<tr class="separator:a0804ce20a4a1cba3e3dcd3ac520b1ffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5a81c7b8a4c2a6f6268ac0596a9e7f31"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a5a81c7b8a4c2a6f6268ac0596a9e7f31">mpi_div_int</a> (<a class="el" href="structmpi.html">mpi</a> *Q, <a class="el" href="structmpi.html">mpi</a> *R, const <a class="el" href="structmpi.html">mpi</a> *A, <a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a> b)</td></tr>
<tr class="memdesc:a5a81c7b8a4c2a6f6268ac0596a9e7f31"><td class="mdescLeft">&#160;</td><td class="mdescRight">Division by int: A = Q * b + R.  <a href="#a5a81c7b8a4c2a6f6268ac0596a9e7f31">More...</a><br/></td></tr>
<tr class="separator:a5a81c7b8a4c2a6f6268ac0596a9e7f31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a075d3cf21cb3733e5f0a872e72b0cd15"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a075d3cf21cb3733e5f0a872e72b0cd15">mpi_mod_mpi</a> (<a class="el" href="structmpi.html">mpi</a> *R, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *B)</td></tr>
<tr class="memdesc:a075d3cf21cb3733e5f0a872e72b0cd15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Modulo: R = A mod B.  <a href="#a075d3cf21cb3733e5f0a872e72b0cd15">More...</a><br/></td></tr>
<tr class="separator:a075d3cf21cb3733e5f0a872e72b0cd15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cf9128e5d55fd1e95696fe8cb405b92"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a8cf9128e5d55fd1e95696fe8cb405b92">mpi_mod_int</a> (<a class="el" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a> *r, const <a class="el" href="structmpi.html">mpi</a> *A, <a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a> b)</td></tr>
<tr class="memdesc:a8cf9128e5d55fd1e95696fe8cb405b92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Modulo: r = A mod b.  <a href="#a8cf9128e5d55fd1e95696fe8cb405b92">More...</a><br/></td></tr>
<tr class="separator:a8cf9128e5d55fd1e95696fe8cb405b92"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84befed1943a584332e0599605b0d3fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a84befed1943a584332e0599605b0d3fe">mpi_exp_mod</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *E, const <a class="el" href="structmpi.html">mpi</a> *N, <a class="el" href="structmpi.html">mpi</a> *_RR)</td></tr>
<tr class="memdesc:a84befed1943a584332e0599605b0d3fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sliding-window exponentiation: X = A^E mod N.  <a href="#a84befed1943a584332e0599605b0d3fe">More...</a><br/></td></tr>
<tr class="separator:a84befed1943a584332e0599605b0d3fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ac8858041a8d5b49c11d38fd4069975"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a5ac8858041a8d5b49c11d38fd4069975">mpi_fill_random</a> (<a class="el" href="structmpi.html">mpi</a> *X, size_t size, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:a5ac8858041a8d5b49c11d38fd4069975"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fill an MPI X with size bytes of random.  <a href="#a5ac8858041a8d5b49c11d38fd4069975">More...</a><br/></td></tr>
<tr class="separator:a5ac8858041a8d5b49c11d38fd4069975"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab1448e8d36dbf542b2230131da8298aa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ab1448e8d36dbf542b2230131da8298aa">mpi_gcd</a> (<a class="el" href="structmpi.html">mpi</a> *G, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *B)</td></tr>
<tr class="memdesc:ab1448e8d36dbf542b2230131da8298aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Greatest common divisor: G = gcd(A, B)  <a href="#ab1448e8d36dbf542b2230131da8298aa">More...</a><br/></td></tr>
<tr class="separator:ab1448e8d36dbf542b2230131da8298aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a090616da16b87653c025874e1675da79"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a090616da16b87653c025874e1675da79">mpi_inv_mod</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, const <a class="el" href="structmpi.html">mpi</a> *N)</td></tr>
<tr class="memdesc:a090616da16b87653c025874e1675da79"><td class="mdescLeft">&#160;</td><td class="mdescRight">Modular inverse: X = A^-1 mod N.  <a href="#a090616da16b87653c025874e1675da79">More...</a><br/></td></tr>
<tr class="separator:a090616da16b87653c025874e1675da79"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf23b7959312c2fcf222d7ce6ac32320"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#adf23b7959312c2fcf222d7ce6ac32320">mpi_is_prime</a> (<a class="el" href="structmpi.html">mpi</a> *X, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:adf23b7959312c2fcf222d7ce6ac32320"><td class="mdescLeft">&#160;</td><td class="mdescRight">Miller-Rabin primality test.  <a href="#adf23b7959312c2fcf222d7ce6ac32320">More...</a><br/></td></tr>
<tr class="separator:adf23b7959312c2fcf222d7ce6ac32320"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a39480daedc47c4eae7574a6d028f352c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a39480daedc47c4eae7574a6d028f352c">mpi_gen_prime</a> (<a class="el" href="structmpi.html">mpi</a> *X, size_t nbits, int dh_flag, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:a39480daedc47c4eae7574a6d028f352c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prime number generation.  <a href="#a39480daedc47c4eae7574a6d028f352c">More...</a><br/></td></tr>
<tr class="separator:a39480daedc47c4eae7574a6d028f352c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab21c92239348bc2c84513968a3e391b2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ab21c92239348bc2c84513968a3e391b2">mpi_self_test</a> (int verbose)</td></tr>
<tr class="memdesc:ab21c92239348bc2c84513968a3e391b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checkup routine.  <a href="#ab21c92239348bc2c84513968a3e391b2">More...</a><br/></td></tr>
<tr class="separator:ab21c92239348bc2c84513968a3e391b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Multi-precision integer library. </p>
<p>Copyright (C) 2006-2014, Brainspark B.V.</p>
<p>This file is part of PolarSSL (<a href="http://www.polarssl.org">http://www.polarssl.org</a>) Lead Maintainer: Paul Bakker &lt;polarssl_maintainer at polarssl.org&gt;</p>
<p>All rights reserved.</p>
<p>This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.</p>
<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p>
<p>You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. </p>

<p>Definition in file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="a97c90562c6192dfc2b8cf38152e1fa4b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define LN_2_DIV_LN_10_SCALE100&#160;&#160;&#160;332</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00117">117</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="a024b186dd3608bcbcfc9dd36212a18ec"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define MPI_CHK</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">f</td><td>)</td>
          <td>&#160;&#160;&#160;do { if( ( ret = f ) != 0 ) goto cleanup; } while( 0 )</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00065">65</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="aad5959617396031440786cd8ff24712a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_MPI_BAD_INPUT_DATA&#160;&#160;&#160;-0x0004</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Bad input parameters to function. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00057">57</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="ab0139fd8e0536a4bd1da18c9ea5bcb84"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_MPI_BUFFER_TOO_SMALL&#160;&#160;&#160;-0x0008</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The buffer is too small to write to. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00059">59</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="a96380f09df1ad46baba97af000b05466"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_MPI_DIVISION_BY_ZERO&#160;&#160;&#160;-0x000C</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The input argument for division is zero, which is not allowed. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00061">61</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="a4f10c6e250b7a06f2fc01ce48a823fc8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_MPI_FILE_IO_ERROR&#160;&#160;&#160;-0x0002</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>An error occurred while reading from or writing to a file. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00056">56</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="af2d758961ae9e4085d2a43588ecb782a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_MPI_INVALID_CHARACTER&#160;&#160;&#160;-0x0006</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>There is an invalid character in the digit string. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00058">58</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="ad288a13737d14f102748c3184ed5a494"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_MPI_MALLOC_FAILED&#160;&#160;&#160;-0x0010</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Memory allocation failed. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00063">63</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="afbbffbd20b56d2b8f3db8edf76cdbdb4"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_MPI_NEGATIVE_VALUE&#160;&#160;&#160;-0x000A</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The input arguments are negative or result in illegal output. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00060">60</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="ac42cb2c2b13df48182ee833de2e4adbf"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_MPI_NOT_ACCEPTABLE&#160;&#160;&#160;-0x000E</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The input arguments are not acceptable. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00062">62</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="aaa32170d1fc407e0be9ddbce62871c74"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_HAVE_INT32</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00158">158</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="a4f497e14fe66e1d321e4edb73126908b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_HAVE_UDBL</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00167">167</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="aca6ca30059eab25954ebb962a8b69c52"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_MPI_MAX_BITS&#160;&#160;&#160;( 8 * <a class="el" href="bignum_8h.html#aae43600df723c0b882201f556c028b1f">POLARSSL_MPI_MAX_SIZE</a> )</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Maximum number of bits for usable MPIs. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00096">96</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="ac2146744fdaa3abf5ee13918c2d5268b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_MPI_MAX_BITS_SCALE100&#160;&#160;&#160;( 100 * <a class="el" href="bignum_8h.html#aca6ca30059eab25954ebb962a8b69c52">POLARSSL_MPI_MAX_BITS</a> )</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00116">116</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="a8ee0afd7c8a22f13aaa70d3c812e81f7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_MPI_MAX_LIMBS&#160;&#160;&#160;10000</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00070">70</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="aae43600df723c0b882201f556c028b1f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_MPI_MAX_SIZE&#160;&#160;&#160;512</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Maximum number of bytes for usable MPIs. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00093">93</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="a728c03b4fdb0f4e9e84a5488adf1c5d0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_MPI_RW_BUFFER_SIZE&#160;&#160;&#160;( ((<a class="el" href="bignum_8h.html#ac2146744fdaa3abf5ee13918c2d5268b">POLARSSL_MPI_MAX_BITS_SCALE100</a> + <a class="el" href="bignum_8h.html#a97c90562c6192dfc2b8cf38152e1fa4b">LN_2_DIV_LN_10_SCALE100</a> - 1) / <a class="el" href="bignum_8h.html#a97c90562c6192dfc2b8cf38152e1fa4b">LN_2_DIV_LN_10_SCALE100</a>) + 10 + 6 )</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00118">118</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="a5eb26ce753f5110fd69713ea976fd63e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_MPI_WINDOW_SIZE&#160;&#160;&#160;6</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Maximum windows size used. </p>

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00082">82</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="abbc933ccc2d1d02925e6886d9b4f5873"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef int32_t <a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00159">159</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="a15c9839c39da2a8dc13255a226d05d87"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef unsigned long long <a class="el" href="bignum_8h.html#a15c9839c39da2a8dc13255a226d05d87">t_udbl</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00166">166</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<a class="anchor" id="ad5d1464f801a0e7d2ed32a8f8dc2ccc9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef uint32_t <a class="el" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="bignum_8h_source.html#l00160">160</a> of file <a class="el" href="bignum_8h_source.html">bignum.h</a>.</p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a5d1cf13ed3c825b61e0b04085ec30f40"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_add_abs </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Unsigned addition: X = |A| + |B|. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">B</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a3b88dbe31d038dfae7f27144984f9ae0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_add_int </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>&#160;</td>
          <td class="paramname"><em>b</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Signed addition: X = A + b. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">b</td><td>The integer value to add</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="adf5b20e8d8c0a660e4f59f859a0bee18"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_add_mpi </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Signed addition: X = A + B. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">B</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a6a692b3d8cd05ae753ab5a39b5634c0a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_cmp_abs </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>Y</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compare unsigned values. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">Y</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>1 if |X| is greater than |Y|, -1 if |X| is lesser than |Y| or 0 if |X| is equal to |Y| </dd></dl>

</div>
</div>
<a class="anchor" id="aee6dc030f0fa278c1576c457088b4910"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_cmp_int </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>&#160;</td>
          <td class="paramname"><em>z</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compare signed values. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">z</td><td>The integer value to compare to</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>1 if X is greater than z, -1 if X is lesser than z or 0 if X is equal to z </dd></dl>

</div>
</div>
<a class="anchor" id="aec20dff9d78738e3c80b212df9875b83"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_cmp_mpi </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>Y</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compare signed values. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">Y</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>1 if X is greater than Y, -1 if X is lesser than Y or 0 if X is equal to Y </dd></dl>

</div>
</div>
<a class="anchor" id="a6fbcce39a9d92d9e2a560f8aa6a810f4"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_copy </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>Y</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy the contents of Y into X. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">Y</td><td>Source MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a5a81c7b8a4c2a6f6268ac0596a9e7f31"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_div_int </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>Q</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>R</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>&#160;</td>
          <td class="paramname"><em>b</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Division by int: A = Q * b + R. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">Q</td><td>Destination MPI for the quotient </td></tr>
    <tr><td class="paramname">R</td><td>Destination MPI for the rest value </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">b</td><td>Integer to divide by</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Either Q or R can be NULL. </dd></dl>

</div>
</div>
<a class="anchor" id="a0804ce20a4a1cba3e3dcd3ac520b1ffb"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_div_mpi </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>Q</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>R</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Division by mpi: A = Q * B + R. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">Q</td><td>Destination MPI for the quotient </td></tr>
    <tr><td class="paramname">R</td><td>Destination MPI for the rest value </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">B</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_MPI_DIVISION_BY_ZERO if B == 0</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Either Q or R can be NULL. </dd></dl>

</div>
</div>
<a class="anchor" id="a84befed1943a584332e0599605b0d3fe"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_exp_mod </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>E</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>N</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>_RR</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Sliding-window exponentiation: X = A^E mod N. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">E</td><td>Exponent MPI </td></tr>
    <tr><td class="paramname">N</td><td>Modular MPI </td></tr>
    <tr><td class="paramname">_RR</td><td>Speed-up MPI used for recalculations</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_MPI_BAD_INPUT_DATA if N is negative or even or if E is negative</dd></dl>
<dl class="section note"><dt>Note</dt><dd>_RR is used to avoid re-computing R*R mod N across multiple calls, which speeds up things a bit. It can be set to NULL if the extra performance is unneeded. </dd></dl>

</div>
</div>
<a class="anchor" id="a5ac8858041a8d5b49c11d38fd4069975"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_fill_random </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int(*)(void *, unsigned char *, size_t)&#160;</td>
          <td class="paramname"><em>f_rng</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>p_rng</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Fill an MPI X with size bytes of random. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">size</td><td>Size in bytes </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="ae1f6507671587755e46bbf0afcae6a8c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mpi_free </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Unallocate one MPI. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>One MPI to unallocate. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ab1448e8d36dbf542b2230131da8298aa"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_gcd </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>G</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Greatest common divisor: G = gcd(A, B) </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">G</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">B</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a39480daedc47c4eae7574a6d028f352c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_gen_prime </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>nbits</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dh_flag</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int(*)(void *, unsigned char *, size_t)&#160;</td>
          <td class="paramname"><em>f_rng</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>p_rng</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Prime number generation. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">nbits</td><td>Required size of X in bits ( 3 &lt;= nbits &lt;= POLARSSL_MPI_MAX_BITS ) </td></tr>
    <tr><td class="paramname">dh_flag</td><td>If 1, then (X-1)/2 will be prime too </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful (probably prime), POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_MPI_BAD_INPUT_DATA if nbits is &lt; 3 </dd></dl>

</div>
</div>
<a class="anchor" id="a920345ada5c75a913b32a00fed3bd36c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_get_bit </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>pos</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get a specific bit from X. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to use </td></tr>
    <tr><td class="paramname">pos</td><td>Zero-based index of the bit in X</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Either a 0 or a 1 </dd></dl>

</div>
</div>
<a class="anchor" id="ac585f00fc9be270de074e8fbfb508d6a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_grow </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>nblimbs</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Enlarge to the specified number of limbs. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to grow </td></tr>
    <tr><td class="paramname">nblimbs</td><td>The target number of limbs</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a201666869f65225d6535bcc697f95c9b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mpi_init </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Initialize one MPI. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>One MPI to initialize. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a090616da16b87653c025874e1675da79"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_inv_mod </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>N</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Modular inverse: X = A^-1 mod N. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">N</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_MPI_BAD_INPUT_DATA if N is negative or nil POLARSSL_ERR_MPI_NOT_ACCEPTABLE if A has no inverse mod N </dd></dl>

</div>
</div>
<a class="anchor" id="adf23b7959312c2fcf222d7ce6ac32320"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_is_prime </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int(*)(void *, unsigned char *, size_t)&#160;</td>
          <td class="paramname"><em>f_rng</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>p_rng</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Miller-Rabin primality test. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to check </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful (probably prime), POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_MPI_NOT_ACCEPTABLE if X is not prime </dd></dl>

</div>
</div>
<a class="anchor" id="a6d6079272ffa625501f58127172a4f53"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t mpi_lsb </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return the number of zero-bits before the least significant '1' bit. </p>
<p>Note: Thus also the zero-based index of the least significant '1' bit</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to use </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a007d6236aebb0ff4a3d92ce8f525a3ae"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_lset </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>&#160;</td>
          <td class="paramname"><em>z</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set value from integer. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to set </td></tr>
    <tr><td class="paramname">z</td><td>Value to use</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a8cf9128e5d55fd1e95696fe8cb405b92"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_mod_int </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a> *&#160;</td>
          <td class="paramname"><em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>&#160;</td>
          <td class="paramname"><em>b</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Modulo: r = A mod b. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">r</td><td>Destination t_uint </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">b</td><td>Integer to divide by</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0, POLARSSL_ERR_MPI_NEGATIVE_VALUE if b &lt; 0 </dd></dl>

</div>
</div>
<a class="anchor" id="a075d3cf21cb3733e5f0a872e72b0cd15"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_mod_mpi </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>R</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Modulo: R = A mod B. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">R</td><td>Destination MPI for the rest value </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">B</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_MPI_DIVISION_BY_ZERO if B == 0, POLARSSL_ERR_MPI_NEGATIVE_VALUE if B &lt; 0 </dd></dl>

</div>
</div>
<a class="anchor" id="a4d461a7bff5a31df34bbf93ec00ab886"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t mpi_msb </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return the number of bits up to and including the most significant '1' bit'. </p>
<p>Note: Thus also the one-based index of the most significant '1' bit</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to use </td></tr>
  </table>
  </dd>
</dl>

<p>Referenced by <a class="el" href="openssl_8h_source.html#l00078">d2i_RSA_PUBKEY()</a>.</p>

</div>
</div>
<a class="anchor" id="a79ee36f6e38e4de6d24047bd685747b4"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_mul_int </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>&#160;</td>
          <td class="paramname"><em>b</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Baseline multiplication: X = A * b Note: despite the functon signature, b is treated as a t_uint. </p>
<p>Negative values of b are treated as large positive values.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">b</td><td>The integer value to multiply with</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="ab63bfb07b27db84268491cd7d68bddc0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_mul_mpi </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Baseline multiplication: X = A * B. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">B</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a0235008cccbf00b8bc03699de8094819"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_read_binary </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buflen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Import X from unsigned binary data, big endian. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">buf</td><td>Input buffer </td></tr>
    <tr><td class="paramname">buflen</td><td>Input buffer size</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

<p>Referenced by <a class="el" href="openssl_8h_source.html#l00078">d2i_RSA_PUBKEY()</a>.</p>

</div>
</div>
<a class="anchor" id="aa3305289daa8dcc9e70fade0eaa1dc99"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_read_file </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>radix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FILE *&#160;</td>
          <td class="paramname"><em>fin</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Read X from an opened file. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">radix</td><td>Input numeric base </td></tr>
    <tr><td class="paramname">fin</td><td>Input file handle</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_BUFFER_TOO_SMALL if the file read buffer is too small or a POLARSSL_ERR_MPI_XXX error code </dd></dl>

</div>
</div>
<a class="anchor" id="a752d12c301f4e5df56f17e9bc8d78d74"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_read_string </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>radix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>s</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Import from an ASCII string. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">radix</td><td>Input numeric base </td></tr>
    <tr><td class="paramname">s</td><td>Null-terminated string buffer</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a POLARSSL_ERR_MPI_XXX error code </dd></dl>

</div>
</div>
<a class="anchor" id="a4022aef0c79b5a7121ee294cc139ae12"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_safe_cond_assign </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>Y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char&#160;</td>
          <td class="paramname"><em>assign</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Safe conditional assignement X = Y if assign is 1. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to conditionally assign to </td></tr>
    <tr><td class="paramname">Y</td><td>Value to be assigned </td></tr>
    <tr><td class="paramname">assign</td><td>1: perform the assignment, 0: keep X's original value</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed,</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function is equivalent to if( assign ) mpi_copy( X, Y ); except that it avoids leaking any information about whether the assignment was done or not (the above code may leak information through branch prediction and/or memory access patterns analysis). </dd></dl>

</div>
</div>
<a class="anchor" id="a9128b59005aad61e8d07bedd0c2973b7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_safe_cond_swap </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>Y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char&#160;</td>
          <td class="paramname"><em>assign</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Safe conditional swap X &lt;-&gt; Y if swap is 1. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>First mpi value </td></tr>
    <tr><td class="paramname">Y</td><td>Second mpi value </td></tr>
    <tr><td class="paramname">assign</td><td>1: perform the swap, 0: keep X and Y's original values</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed,</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function is equivalent to if( assign ) mpi_swap( X, Y ); except that it avoids leaking any information about whether the assignment was done or not (the above code may leak information through branch prediction and/or memory access patterns analysis). </dd></dl>

</div>
</div>
<a class="anchor" id="ab21c92239348bc2c84513968a3e391b2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_self_test </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>verbose</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Checkup routine. </p>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or 1 if the test failed </dd></dl>

</div>
</div>
<a class="anchor" id="ac70dd057e989b021c4a535470d6afec9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_set_bit </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>pos</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char&#160;</td>
          <td class="paramname"><em>val</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set a bit of X to a specific value of 0 or 1. </p>
<dl class="section note"><dt>Note</dt><dd>Will grow X if necessary to set a bit to 1 in a not yet existing limb. Will not grow if bit should be set to 0</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to use </td></tr>
    <tr><td class="paramname">pos</td><td>Zero-based index of the bit in X </td></tr>
    <tr><td class="paramname">val</td><td>The value to set the bit to (0 or 1)</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_MPI_BAD_INPUT_DATA if val is not 0 or 1 </dd></dl>

</div>
</div>
<a class="anchor" id="a17537330dbe685ca867e52479a8ef7c3"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_shift_l </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>count</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Left-shift: X &lt;&lt;= count. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to shift </td></tr>
    <tr><td class="paramname">count</td><td>Amount to shift</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a01de1543da79d0ad0f58916d608f6ff8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_shift_r </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>count</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Right-shift: X &gt;&gt;= count. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to shift </td></tr>
    <tr><td class="paramname">count</td><td>Amount to shift</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="adaa24d645b3940d17fb6ac1d6fd17408"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_shrink </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>nblimbs</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Resize down, keeping at least the specified number of limbs. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to shrink </td></tr>
    <tr><td class="paramname">nblimbs</td><td>The minimum number of limbs to keep</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a8aa3a3d3aac9e49879ea8cd308859d23"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t mpi_size </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return the total size in bytes. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>MPI to use </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a19d09ef62c09539feb7f9b3045cfb1fe"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_sub_abs </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Unsigned subtraction: X = |A| - |B|. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">B</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_NEGATIVE_VALUE if B is greater than A </dd></dl>

</div>
</div>
<a class="anchor" id="acfdf0f6effb7f976a2f90844c492e160"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_sub_int </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>&#160;</td>
          <td class="paramname"><em>b</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Signed subtraction: X = A - b. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">b</td><td>The integer value to subtract</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a149a13ed93fddb432fb5edd3126b1186"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_sub_mpi </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Signed subtraction: X = A - B. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Destination MPI </td></tr>
    <tr><td class="paramname">A</td><td>Left-hand MPI </td></tr>
    <tr><td class="paramname">B</td><td>Right-hand MPI</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a5456193a9ebcfe612b93cfb509995a75"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mpi_swap </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>Y</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Swap the contents of X and Y. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>First MPI value </td></tr>
    <tr><td class="paramname">Y</td><td>Second MPI value </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a5d464b4312859ce4969d114eb5e02741"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_write_binary </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buflen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Export X into unsigned binary data, big endian. </p>
<pre class="fragment">            Always fills the whole buffer, which will start with zeros
            if the number is smaller.
</pre><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Source MPI </td></tr>
    <tr><td class="paramname">buf</td><td>Output buffer </td></tr>
    <tr><td class="paramname">buflen</td><td>Output buffer size</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_BUFFER_TOO_SMALL if buf isn't large enough </dd></dl>

</div>
</div>
<a class="anchor" id="a6388b8b831a59ae43668857f43e1a907"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_write_file </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>radix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FILE *&#160;</td>
          <td class="paramname"><em>fout</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Write X into an opened file, or stdout if fout is NULL. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>Prefix, can be NULL </td></tr>
    <tr><td class="paramname">X</td><td>Source MPI </td></tr>
    <tr><td class="paramname">radix</td><td>Output numeric base </td></tr>
    <tr><td class="paramname">fout</td><td>Output file handle (can be NULL)</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a POLARSSL_ERR_MPI_XXX error code</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Set fout == NULL to print X on the console. </dd></dl>

</div>
</div>
<a class="anchor" id="aac4c8bb7bf5d700277d27b03aed0df7a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_write_string </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>X</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>radix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>s</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>slen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Export into an ASCII string. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">X</td><td>Source MPI </td></tr>
    <tr><td class="paramname">radix</td><td>Output numeric base </td></tr>
    <tr><td class="paramname">s</td><td>String buffer </td></tr>
    <tr><td class="paramname">slen</td><td>String buffer size</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a POLARSSL_ERR_MPI_XXX error code. *slen is always updated to reflect the amount of data that has (or would have) been written.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Call this function with *slen = 0 to obtain the minimum required buffer size in *slen. </dd></dl>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jul 31 2014 11:35:55 for PolarSSL v1.3.8 by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.5
</small></address>
</body>
</html>