Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 8df484ca79a7b6bb61e4a376e1506870 > files > 39

polarssl-devel-0.14.3-1.fc14.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"/>
<title>PolarSSL: polarssl/bignum.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.7.4 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">PolarSSL</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li id="searchli">
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </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>File&#160;Members</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">polarssl/bignum.h File Reference</div>  </div>
</div>
<div class="contents">
<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br/>
</div>
<p><a href="bignum_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">MPI structure.  <a href="structmpi.html#details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f10c6e250b7a06f2fc01ce48a823fc8"></a><!-- doxytag: member="bignum.h::POLARSSL_ERR_MPI_FILE_IO_ERROR" ref="a4f10c6e250b7a06f2fc01ce48a823fc8" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>POLARSSL_ERR_MPI_FILE_IO_ERROR</b>&#160;&#160;&#160;0x0002</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad5959617396031440786cd8ff24712a"></a><!-- doxytag: member="bignum.h::POLARSSL_ERR_MPI_BAD_INPUT_DATA" ref="aad5959617396031440786cd8ff24712a" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>POLARSSL_ERR_MPI_BAD_INPUT_DATA</b>&#160;&#160;&#160;0x0004</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2d758961ae9e4085d2a43588ecb782a"></a><!-- doxytag: member="bignum.h::POLARSSL_ERR_MPI_INVALID_CHARACTER" ref="af2d758961ae9e4085d2a43588ecb782a" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>POLARSSL_ERR_MPI_INVALID_CHARACTER</b>&#160;&#160;&#160;0x0006</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0139fd8e0536a4bd1da18c9ea5bcb84"></a><!-- doxytag: member="bignum.h::POLARSSL_ERR_MPI_BUFFER_TOO_SMALL" ref="ab0139fd8e0536a4bd1da18c9ea5bcb84" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>POLARSSL_ERR_MPI_BUFFER_TOO_SMALL</b>&#160;&#160;&#160;0x0008</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbbffbd20b56d2b8f3db8edf76cdbdb4"></a><!-- doxytag: member="bignum.h::POLARSSL_ERR_MPI_NEGATIVE_VALUE" ref="afbbffbd20b56d2b8f3db8edf76cdbdb4" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>POLARSSL_ERR_MPI_NEGATIVE_VALUE</b>&#160;&#160;&#160;0x000A</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96380f09df1ad46baba97af000b05466"></a><!-- doxytag: member="bignum.h::POLARSSL_ERR_MPI_DIVISION_BY_ZERO" ref="a96380f09df1ad46baba97af000b05466" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>POLARSSL_ERR_MPI_DIVISION_BY_ZERO</b>&#160;&#160;&#160;0x000C</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac42cb2c2b13df48182ee833de2e4adbf"></a><!-- doxytag: member="bignum.h::POLARSSL_ERR_MPI_NOT_ACCEPTABLE" ref="ac42cb2c2b13df48182ee833de2e4adbf" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>POLARSSL_ERR_MPI_NOT_ACCEPTABLE</b>&#160;&#160;&#160;0x000E</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a024b186dd3608bcbcfc9dd36212a18ec"></a><!-- doxytag: member="bignum.h::MPI_CHK" ref="a024b186dd3608bcbcfc9dd36212a18ec" args="(f)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>MPI_CHK</b>(f)&#160;&#160;&#160;if( ( ret = f ) != 0 ) goto cleanup</td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f34b565721b3f57a8507784c68eedb1"></a><!-- doxytag: member="bignum.h::t_int" ref="a0f34b565721b3f57a8507784c68eedb1" args="" -->
typedef unsigned long&#160;</td><td class="memItemRight" valign="bottom"><b>t_int</b></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a688ff1cdda8c2676b1c05fee3fa05a83"></a><!-- doxytag: member="bignum.h::mpi_init" ref="a688ff1cdda8c2676b1c05fee3fa05a83" args="(mpi *X,...)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a688ff1cdda8c2676b1c05fee3fa05a83">mpi_init</a> (<a class="el" href="structmpi.html">mpi</a> *X,...)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize one or more mpi. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7798ce5cd2d39f4c8aab2f6775f9dc5"></a><!-- doxytag: member="bignum.h::mpi_free" ref="ac7798ce5cd2d39f4c8aab2f6775f9dc5" args="(mpi *X,...)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ac7798ce5cd2d39f4c8aab2f6775f9dc5">mpi_free</a> (<a class="el" href="structmpi.html">mpi</a> *X,...)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Unallocate one or more mpi. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aabe2f2487b7198ee547e6ba6181831ab">mpi_grow</a> (<a class="el" href="structmpi.html">mpi</a> *X, int nblimbs)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Enlarge to the specified number of limbs.  <a href="#aabe2f2487b7198ee547e6ba6181831ab"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy the contents of Y into X.  <a href="#a6fbcce39a9d92d9e2a560f8aa6a810f4"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap the contents of X and Y.  <a href="#a5456193a9ebcfe612b93cfb509995a75"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a07c9e7f3ad4ab72825c9d87e6bfeb752">mpi_lset</a> (<a class="el" href="structmpi.html">mpi</a> *X, int z)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set value from integer.  <a href="#a07c9e7f3ad4ab72825c9d87e6bfeb752"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a776edc2710c557b156ee776c8a01ee0b">mpi_lsb</a> (const <a class="el" href="structmpi.html">mpi</a> *X)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the number of least significant bits.  <a href="#a776edc2710c557b156ee776c8a01ee0b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ad096896655db574017c0bcc33b5a737c">mpi_msb</a> (const <a class="el" href="structmpi.html">mpi</a> *X)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the number of most significant bits.  <a href="#ad096896655db574017c0bcc33b5a737c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a00a1b277e9bb633829a9a01081aae5b9">mpi_size</a> (const <a class="el" href="structmpi.html">mpi</a> *X)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the total size in bytes.  <a href="#a00a1b277e9bb633829a9a01081aae5b9"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Import from an ASCII string.  <a href="#a752d12c301f4e5df56f17e9bc8d78d74"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ab17a1248cbb1fc536bc2d04b56475453">mpi_write_string</a> (const <a class="el" href="structmpi.html">mpi</a> *X, int radix, char *s, int *slen)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Export into an ASCII string.  <a href="#ab17a1248cbb1fc536bc2d04b56475453"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Read X from an opened file.  <a href="#aa3305289daa8dcc9e70fade0eaa1dc99"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Write X into an opened file, or stdout if fout is NULL.  <a href="#a6388b8b831a59ae43668857f43e1a907"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#af047934205fd3fa9b1212e068f8ef13b">mpi_read_binary</a> (<a class="el" href="structmpi.html">mpi</a> *X, const unsigned char *buf, int buflen)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Import X from unsigned binary data, big endian.  <a href="#af047934205fd3fa9b1212e068f8ef13b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a4412ec6adc1f741046840892f74c0ca1">mpi_write_binary</a> (const <a class="el" href="structmpi.html">mpi</a> *X, unsigned char *buf, int buflen)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Export X into unsigned binary data, big endian.  <a href="#a4412ec6adc1f741046840892f74c0ca1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ae2dc6046a79076a73e8cbee5b1126540">mpi_shift_l</a> (<a class="el" href="structmpi.html">mpi</a> *X, int count)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Left-shift: X &lt;&lt;= count.  <a href="#ae2dc6046a79076a73e8cbee5b1126540"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a394ee6f5b38e31c6871e23bba9c55b74">mpi_shift_r</a> (<a class="el" href="structmpi.html">mpi</a> *X, int count)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Right-shift: X &gt;&gt;= count.  <a href="#a394ee6f5b38e31c6871e23bba9c55b74"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare unsigned values.  <a href="#a6a692b3d8cd05ae753ab5a39b5634c0a"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare signed values.  <a href="#aec20dff9d78738e3c80b212df9875b83"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a424736fabaaeb83d3586834d5cc0f43c">mpi_cmp_int</a> (const <a class="el" href="structmpi.html">mpi</a> *X, int z)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare signed values.  <a href="#a424736fabaaeb83d3586834d5cc0f43c"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned addition: X = |A| + |B|.  <a href="#a5d1cf13ed3c825b61e0b04085ec30f40"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned substraction: X = |A| - |B|.  <a href="#a19d09ef62c09539feb7f9b3045cfb1fe"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed addition: X = A + B.  <a href="#adf5b20e8d8c0a660e4f59f859a0bee18"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed substraction: X = A - B.  <a href="#a149a13ed93fddb432fb5edd3126b1186"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a9d8dcca0ed37191b3bc679b9855f87e7">mpi_add_int</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, int b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed addition: X = A + b.  <a href="#a9d8dcca0ed37191b3bc679b9855f87e7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#aafd0308e78457a8e3db66b34dcd8630f">mpi_sub_int</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, int b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed substraction: X = A - b.  <a href="#aafd0308e78457a8e3db66b34dcd8630f"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Baseline multiplication: X = A * B.  <a href="#ab63bfb07b27db84268491cd7d68bddc0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ab80072297564eab172b84542aeeae6e4">mpi_mul_int</a> (<a class="el" href="structmpi.html">mpi</a> *X, const <a class="el" href="structmpi.html">mpi</a> *A, t_int b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Baseline multiplication: X = A * b Note: b is an unsigned integer type, thus Negative values of b are ignored.  <a href="#ab80072297564eab172b84542aeeae6e4"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Division by mpi: A = Q * B + R.  <a href="#a0804ce20a4a1cba3e3dcd3ac520b1ffb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#af7768fca6b7bb6ec4adf96926afb723c">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, int b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Division by int: A = Q * b + R.  <a href="#af7768fca6b7bb6ec4adf96926afb723c"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Modulo: R = A mod B.  <a href="#a075d3cf21cb3733e5f0a872e72b0cd15"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ab9917647b563ff5de3e4a3c032b64a88">mpi_mod_int</a> (t_int *r, const <a class="el" href="structmpi.html">mpi</a> *A, int b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Modulo: r = A mod b.  <a href="#ab9917647b563ff5de3e4a3c032b64a88"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Sliding-window exponentiation: X = A^E mod N.  <a href="#a84befed1943a584332e0599605b0d3fe"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Greatest common divisor: G = gcd(A, B)  <a href="#ab1448e8d36dbf542b2230131da8298aa"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Modular inverse: X = A^-1 mod N.  <a href="#a090616da16b87653c025874e1675da79"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#ae56de1a4201b7abdd162c31aa44d0b51">mpi_is_prime</a> (<a class="el" href="structmpi.html">mpi</a> *X, int(*f_rng)(void *), void *p_rng)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Miller-Rabin primality test.  <a href="#ae56de1a4201b7abdd162c31aa44d0b51"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html#a7c19f6a87ef1ac0ff5a3e50acb2fa443">mpi_gen_prime</a> (<a class="el" href="structmpi.html">mpi</a> *X, int nbits, int dh_flag, int(*f_rng)(void *), void *p_rng)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Prime number generation.  <a href="#a7c19f6a87ef1ac0ff5a3e50acb2fa443"></a><br/></td></tr>
<tr><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><td class="mdescLeft">&#160;</td><td class="mdescRight">Checkup routine.  <a href="#ab21c92239348bc2c84513968a3e391b2"></a><br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>Copyright (C) 2006-2010, 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>
</div><hr/><h2>Function Documentation</h2>
<a class="anchor" id="a5d1cf13ed3c825b61e0b04085ec30f40"></a><!-- doxytag: member="bignum.h::mpi_add_abs" ref="a5d1cf13ed3c825b61e0b04085ec30f40" args="(mpi *X, const mpi *A, const mpi *B)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a9d8dcca0ed37191b3bc679b9855f87e7"></a><!-- doxytag: member="bignum.h::mpi_add_int" ref="a9d8dcca0ed37191b3bc679b9855f87e7" args="(mpi *X, const mpi *A, int b)" -->
<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">int&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="adf5b20e8d8c0a660e4f59f859a0bee18"></a><!-- doxytag: member="bignum.h::mpi_add_mpi" ref="adf5b20e8d8c0a660e4f59f859a0bee18" args="(mpi *X, const mpi *A, const mpi *B)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a6a692b3d8cd05ae753ab5a39b5634c0a"></a><!-- doxytag: member="bignum.h::mpi_cmp_abs" ref="a6a692b3d8cd05ae753ab5a39b5634c0a" args="(const mpi *X, const mpi *Y)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></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="a424736fabaaeb83d3586834d5cc0f43c"></a><!-- doxytag: member="bignum.h::mpi_cmp_int" ref="a424736fabaaeb83d3586834d5cc0f43c" args="(const mpi *X, int z)" -->
<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">int&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></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><!-- doxytag: member="bignum.h::mpi_cmp_mpi" ref="aec20dff9d78738e3c80b212df9875b83" args="(const mpi *X, const mpi *Y)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></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><!-- doxytag: member="bignum.h::mpi_copy" ref="a6fbcce39a9d92d9e2a560f8aa6a810f4" args="(mpi *X, const mpi *Y)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="af7768fca6b7bb6ec4adf96926afb723c"></a><!-- doxytag: member="bignum.h::mpi_div_int" ref="af7768fca6b7bb6ec4adf96926afb723c" args="(mpi *Q, mpi *R, const mpi *A, int b)" -->
<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">int&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed, POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>Either Q or R can be NULL. </dd></dl>

</div>
</div>
<a class="anchor" id="a0804ce20a4a1cba3e3dcd3ac520b1ffb"></a><!-- doxytag: member="bignum.h::mpi_div_mpi" ref="a0804ce20a4a1cba3e3dcd3ac520b1ffb" args="(mpi *Q, mpi *R, const mpi *A, const mpi *B)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed, POLARSSL_ERR_MPI_DIVISION_BY_ZERO if B == 0</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>Either Q or R can be NULL. </dd></dl>

</div>
</div>
<a class="anchor" id="a84befed1943a584332e0599605b0d3fe"></a><!-- doxytag: member="bignum.h::mpi_exp_mod" ref="a84befed1943a584332e0599605b0d3fe" args="(mpi *X, const mpi *A, const mpi *E, const mpi *N, mpi *_RR)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed, POLARSSL_ERR_MPI_BAD_INPUT_DATA if N is negative or even</dd></dl>
<dl class="note"><dt><b>Note:</b></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="ab1448e8d36dbf542b2230131da8298aa"></a><!-- doxytag: member="bignum.h::mpi_gcd" ref="ab1448e8d36dbf542b2230131da8298aa" args="(mpi *G, const mpi *A, const mpi *B)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a7c19f6a87ef1ac0ff5a3e50acb2fa443"></a><!-- doxytag: member="bignum.h::mpi_gen_prime" ref="a7c19f6a87ef1ac0ff5a3e50acb2fa443" args="(mpi *X, int nbits, int dh_flag, int(*f_rng)(void *), void *p_rng)" -->
<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">int&#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 *)&#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><dt><b>Parameters:</b></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 </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="return"><dt><b>Returns:</b></dt><dd>0 if successful (probably prime), 1 if memory allocation failed, POLARSSL_ERR_MPI_BAD_INPUT_DATA if nbits is &lt; 3 </dd></dl>

</div>
</div>
<a class="anchor" id="aabe2f2487b7198ee547e6ba6181831ab"></a><!-- doxytag: member="bignum.h::mpi_grow" ref="aabe2f2487b7198ee547e6ba6181831ab" args="(mpi *X, int nblimbs)" -->
<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">int&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a090616da16b87653c025874e1675da79"></a><!-- doxytag: member="bignum.h::mpi_inv_mod" ref="a090616da16b87653c025874e1675da79" args="(mpi *X, const mpi *A, const mpi *N)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 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="ae56de1a4201b7abdd162c31aa44d0b51"></a><!-- doxytag: member="bignum.h::mpi_is_prime" ref="ae56de1a4201b7abdd162c31aa44d0b51" args="(mpi *X, int(*f_rng)(void *), void *p_rng)" -->
<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 *)&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful (probably prime), 1 if memory allocation failed, POLARSSL_ERR_MPI_NOT_ACCEPTABLE if X is not prime </dd></dl>

</div>
</div>
<a class="anchor" id="a776edc2710c557b156ee776c8a01ee0b"></a><!-- doxytag: member="bignum.h::mpi_lsb" ref="a776edc2710c557b156ee776c8a01ee0b" args="(const mpi *X)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int 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 least significant bits. </p>
<dl><dt><b>Parameters:</b></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="a07c9e7f3ad4ab72825c9d87e6bfeb752"></a><!-- doxytag: member="bignum.h::mpi_lset" ref="a07c9e7f3ad4ab72825c9d87e6bfeb752" args="(mpi *X, int z)" -->
<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">int&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="ab9917647b563ff5de3e4a3c032b64a88"></a><!-- doxytag: member="bignum.h::mpi_mod_int" ref="ab9917647b563ff5de3e4a3c032b64a88" args="(t_int *r, const mpi *A, int b)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mpi_mod_int </td>
          <td>(</td>
          <td class="paramtype">t_int *&#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">int&#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><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">r</td><td>Destination t_int </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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 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><!-- doxytag: member="bignum.h::mpi_mod_mpi" ref="a075d3cf21cb3733e5f0a872e72b0cd15" args="(mpi *R, const mpi *A, const mpi *B)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 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="ad096896655db574017c0bcc33b5a737c"></a><!-- doxytag: member="bignum.h::mpi_msb" ref="ad096896655db574017c0bcc33b5a737c" args="(const mpi *X)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int 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 most significant bits. </p>
<dl><dt><b>Parameters:</b></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="ab80072297564eab172b84542aeeae6e4"></a><!-- doxytag: member="bignum.h::mpi_mul_int" ref="ab80072297564eab172b84542aeeae6e4" args="(mpi *X, const mpi *A, t_int b)" -->
<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">t_int&#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: b is an unsigned integer type, thus Negative values of b are ignored. </p>
<dl><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="ab63bfb07b27db84268491cd7d68bddc0"></a><!-- doxytag: member="bignum.h::mpi_mul_mpi" ref="ab63bfb07b27db84268491cd7d68bddc0" args="(mpi *X, const mpi *A, const mpi *B)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="af047934205fd3fa9b1212e068f8ef13b"></a><!-- doxytag: member="bignum.h::mpi_read_binary" ref="af047934205fd3fa9b1212e068f8ef13b" args="(mpi *X, const unsigned char *buf, int buflen)" -->
<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">int&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="aa3305289daa8dcc9e70fade0eaa1dc99"></a><!-- doxytag: member="bignum.h::mpi_read_file" ref="aa3305289daa8dcc9e70fade0eaa1dc99" args="(mpi *X, int radix, FILE *fin)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, or an POLARSSL_ERR_MPI_XXX error code </dd></dl>

</div>
</div>
<a class="anchor" id="a752d12c301f4e5df56f17e9bc8d78d74"></a><!-- doxytag: member="bignum.h::mpi_read_string" ref="a752d12c301f4e5df56f17e9bc8d78d74" args="(mpi *X, int radix, const char *s)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, or an POLARSSL_ERR_MPI_XXX error code </dd></dl>

</div>
</div>
<a class="anchor" id="ab21c92239348bc2c84513968a3e391b2"></a><!-- doxytag: member="bignum.h::mpi_self_test" ref="ab21c92239348bc2c84513968a3e391b2" args="(int verbose)" -->
<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="return"><dt><b>Returns:</b></dt><dd>0 if successful, or 1 if the test failed </dd></dl>

</div>
</div>
<a class="anchor" id="ae2dc6046a79076a73e8cbee5b1126540"></a><!-- doxytag: member="bignum.h::mpi_shift_l" ref="ae2dc6046a79076a73e8cbee5b1126540" args="(mpi *X, int count)" -->
<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">int&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a394ee6f5b38e31c6871e23bba9c55b74"></a><!-- doxytag: member="bignum.h::mpi_shift_r" ref="a394ee6f5b38e31c6871e23bba9c55b74" args="(mpi *X, int count)" -->
<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">int&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a00a1b277e9bb633829a9a01081aae5b9"></a><!-- doxytag: member="bignum.h::mpi_size" ref="a00a1b277e9bb633829a9a01081aae5b9" args="(const mpi *X)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int 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><dt><b>Parameters:</b></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><!-- doxytag: member="bignum.h::mpi_sub_abs" ref="a19d09ef62c09539feb7f9b3045cfb1fe" args="(mpi *X, const mpi *A, const mpi *B)" -->
<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 substraction: X = |A| - |B|. </p>
<dl><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, POLARSSL_ERR_MPI_NEGATIVE_VALUE if B is greater than A </dd></dl>

</div>
</div>
<a class="anchor" id="aafd0308e78457a8e3db66b34dcd8630f"></a><!-- doxytag: member="bignum.h::mpi_sub_int" ref="aafd0308e78457a8e3db66b34dcd8630f" args="(mpi *X, const mpi *A, int b)" -->
<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">int&#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 substraction: X = A - b. </p>
<dl><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a149a13ed93fddb432fb5edd3126b1186"></a><!-- doxytag: member="bignum.h::mpi_sub_mpi" ref="a149a13ed93fddb432fb5edd3126b1186" args="(mpi *X, const mpi *A, const mpi *B)" -->
<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 substraction: X = A - B. </p>
<dl><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, 1 if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a5456193a9ebcfe612b93cfb509995a75"></a><!-- doxytag: member="bignum.h::mpi_swap" ref="a5456193a9ebcfe612b93cfb509995a75" args="(mpi *X, mpi *Y)" -->
<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><dt><b>Parameters:</b></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="a4412ec6adc1f741046840892f74c0ca1"></a><!-- doxytag: member="bignum.h::mpi_write_binary" ref="a4412ec6adc1f741046840892f74c0ca1" args="(const mpi *X, unsigned char *buf, int buflen)" -->
<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">int&#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>
<dl><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></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><!-- doxytag: member="bignum.h::mpi_write_file" ref="a6388b8b831a59ae43668857f43e1a907" args="(const char *p, const mpi *X, int radix, FILE *fout)" -->
<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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, or an POLARSSL_ERR_MPI_XXX error code</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>Set fout == NULL to print X on the console. </dd></dl>

</div>
</div>
<a class="anchor" id="ab17a1248cbb1fc536bc2d04b56475453"></a><!-- doxytag: member="bignum.h::mpi_write_string" ref="ab17a1248cbb1fc536bc2d04b56475453" args="(const mpi *X, int radix, char *s, int *slen)" -->
<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">int *&#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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>0 if successful, or an 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="note"><dt><b>Note:</b></dt><dd>Call this function with *slen = 0 to obtain the minimum required buffer size in *slen. </dd></dl>

</div>
</div>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr class="footer"/><address class="footer"><small>Generated on Mon May 16 2011 for PolarSSL by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
</body>
</html>