<!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 Source File</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 Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data 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 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="headertitle"> <div class="title">bignum.h</div> </div> </div><!--header--> <div class="contents"> <a href="bignum_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div> <div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#ifndef POLARSSL_BIGNUM_H</span></div> <div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span><span class="preprocessor">#define POLARSSL_BIGNUM_H</span></div> <div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdio.h></span></div> <div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <string.h></span></div> <div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div> <div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#if !defined(POLARSSL_CONFIG_FILE)</span></div> <div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="config_8h.html">config.h</a>"</span></div> <div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span><span class="preprocessor">#include POLARSSL_CONFIG_FILE</span></div> <div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div> <div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32)</span></div> <div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span><span class="preprocessor">#include <basetsd.h></span></div> <div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#if (_MSC_VER <= 1200)</span></div> <div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> int16_t;</div> <div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> uint16_t;</div> <div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"></span><span class="keyword">typedef</span> INT16 int16_t;</div> <div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">typedef</span> UINT16 uint16_t;</div> <div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span><span class="keyword">typedef</span> INT32 int32_t;</div> <div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">typedef</span> INT64 int64_t;</div> <div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">typedef</span> UINT32 uint32_t;</div> <div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">typedef</span> UINT64 uint64_t;</div> <div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"></span><span class="preprocessor">#include <inttypes.h></span></div> <div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER && !EFIX64 && !EFI32 */</span><span class="preprocessor"></span></div> <div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="bignum_8h.html#a4f10c6e250b7a06f2fc01ce48a823fc8"> 56</a></span> <span class="preprocessor">#define POLARSSL_ERR_MPI_FILE_IO_ERROR -0x0002 </span></div> <div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="bignum_8h.html#aad5959617396031440786cd8ff24712a"> 57</a></span> <span class="preprocessor">#define POLARSSL_ERR_MPI_BAD_INPUT_DATA -0x0004 </span></div> <div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="bignum_8h.html#af2d758961ae9e4085d2a43588ecb782a"> 58</a></span> <span class="preprocessor">#define POLARSSL_ERR_MPI_INVALID_CHARACTER -0x0006 </span></div> <div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="bignum_8h.html#ab0139fd8e0536a4bd1da18c9ea5bcb84"> 59</a></span> <span class="preprocessor">#define POLARSSL_ERR_MPI_BUFFER_TOO_SMALL -0x0008 </span></div> <div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="bignum_8h.html#afbbffbd20b56d2b8f3db8edf76cdbdb4"> 60</a></span> <span class="preprocessor">#define POLARSSL_ERR_MPI_NEGATIVE_VALUE -0x000A </span></div> <div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="bignum_8h.html#a96380f09df1ad46baba97af000b05466"> 61</a></span> <span class="preprocessor">#define POLARSSL_ERR_MPI_DIVISION_BY_ZERO -0x000C </span></div> <div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="bignum_8h.html#ac42cb2c2b13df48182ee833de2e4adbf"> 62</a></span> <span class="preprocessor">#define POLARSSL_ERR_MPI_NOT_ACCEPTABLE -0x000E </span></div> <div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="bignum_8h.html#ad288a13737d14f102748c3184ed5a494"> 63</a></span> <span class="preprocessor">#define POLARSSL_ERR_MPI_MALLOC_FAILED -0x0010 </span></div> <div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="bignum_8h.html#a024b186dd3608bcbcfc9dd36212a18ec"> 65</a></span> <span class="preprocessor">#define MPI_CHK(f) do { if( ( ret = f ) != 0 ) goto cleanup; } while( 0 )</span></div> <div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">/*</span></div> <div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"> * Maximum size MPIs are allowed to grow to in number of limbs.</span></div> <div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"> */</span></div> <div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="bignum_8h.html#a8ee0afd7c8a22f13aaa70d3c812e81f7"> 70</a></span> <span class="preprocessor">#define POLARSSL_MPI_MAX_LIMBS 10000</span></div> <div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#if !defined(POLARSSL_MPI_WINDOW_SIZE)</span></div> <div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span><span class="comment">/*</span></div> <div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"> * Maximum window size used for modular exponentiation. Default: 6</span></div> <div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> * Minimum value: 1. Maximum value: 6.</span></div> <div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"> *</span></div> <div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> * Result is an array of ( 2 << POLARSSL_MPI_WINDOW_SIZE ) MPIs used</span></div> <div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> * for the sliding window calculation. (So 64 by default)</span></div> <div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"> *</span></div> <div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment"> * Reduction in size, reduces speed.</span></div> <div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"> */</span></div> <div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="bignum_8h.html#a5eb26ce753f5110fd69713ea976fd63e"> 82</a></span> <span class="preprocessor">#define POLARSSL_MPI_WINDOW_SIZE 6 </span></div> <div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor">#endif </span><span class="comment">/* !POLARSSL_MPI_WINDOW_SIZE */</span><span class="preprocessor"></span></div> <div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#if !defined(POLARSSL_MPI_MAX_SIZE)</span></div> <div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor"></span><span class="comment">/*</span></div> <div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment"> * Maximum size of MPIs allowed in bits and bytes for user-MPIs.</span></div> <div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment"> * ( Default: 512 bytes => 4096 bits, Maximum tested: 2048 bytes => 16384 bits )</span></div> <div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"> *</span></div> <div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> * Note: Calculations can results temporarily in larger MPIs. So the number</span></div> <div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> * of limbs required (POLARSSL_MPI_MAX_LIMBS) is higher.</span></div> <div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"> */</span></div> <div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="bignum_8h.html#aae43600df723c0b882201f556c028b1f"> 93</a></span> <span class="preprocessor">#define POLARSSL_MPI_MAX_SIZE 512 </span></div> <div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">#endif </span><span class="comment">/* !POLARSSL_MPI_MAX_SIZE */</span><span class="preprocessor"></span></div> <div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="bignum_8h.html#aca6ca30059eab25954ebb962a8b69c52"> 96</a></span> <span class="preprocessor">#define POLARSSL_MPI_MAX_BITS ( 8 * POLARSSL_MPI_MAX_SIZE ) </span></div> <div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"></span><span class="comment">/*</span></div> <div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> * When reading from files with mpi_read_file() and writing to files with</span></div> <div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"> * mpi_write_file() the buffer should have space</span></div> <div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> * for a (short) label, the MPI (in the provided radix), the newline</span></div> <div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> * characters and the '\0'.</span></div> <div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> *</span></div> <div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment"> * By default we assume at least a 10 char label, a minimum radix of 10</span></div> <div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment"> * (decimal) and a maximum of 4096 bit numbers (1234 decimal chars).</span></div> <div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"> * Autosized at compile time for at least a 10 char label, a minimum radix</span></div> <div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment"> * of 10 (decimal) for a number of POLARSSL_MPI_MAX_BITS size.</span></div> <div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment"> *</span></div> <div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment"> * This used to be statically sized to 1250 for a maximum of 4096 bit</span></div> <div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"> * numbers (1234 decimal chars).</span></div> <div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment"> *</span></div> <div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment"> * Calculate using the formula:</span></div> <div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"> * POLARSSL_MPI_RW_BUFFER_SIZE = ceil(POLARSSL_MPI_MAX_BITS / ln(10) * ln(2)) +</span></div> <div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> * LabelSize + 6</span></div> <div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> */</span><span class="preprocessor"></span></div> <div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="bignum_8h.html#ac2146744fdaa3abf5ee13918c2d5268b"> 116</a></span> <span class="preprocessor"></span><span class="preprocessor">#define POLARSSL_MPI_MAX_BITS_SCALE100 ( 100 * POLARSSL_MPI_MAX_BITS )</span></div> <div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="bignum_8h.html#a97c90562c6192dfc2b8cf38152e1fa4b"> 117</a></span> <span class="preprocessor"></span><span class="preprocessor">#define LN_2_DIV_LN_10_SCALE100 332</span></div> <div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="bignum_8h.html#a728c03b4fdb0f4e9e84a5488adf1c5d0"> 118</a></span> <span class="preprocessor"></span><span class="preprocessor">#define POLARSSL_MPI_RW_BUFFER_SIZE ( ((POLARSSL_MPI_MAX_BITS_SCALE100 + LN_2_DIV_LN_10_SCALE100 - 1) / LN_2_DIV_LN_10_SCALE100) + 10 + 6 )</span></div> <div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment">/*</span></div> <div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"> * Define the base integer type, architecture-wise</span></div> <div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> */</span></div> <div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor">#if defined(POLARSSL_HAVE_INT8)</span></div> <div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">char</span> <a class="code" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>;</div> <div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a>;</div> <div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">typedef</span> uint16_t <a class="code" href="bignum_8h.html#a15c9839c39da2a8dc13255a226d05d87">t_udbl</a>;</div> <div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor">#define POLARSSL_HAVE_UDBL</span></div> <div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div> <div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor"></span><span class="preprocessor">#if defined(POLARSSL_HAVE_INT16)</span></div> <div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor"></span><span class="keyword">typedef</span> int16_t <a class="code" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>;</div> <div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">typedef</span> uint16_t <a class="code" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a>;</div> <div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">typedef</span> uint32_t <a class="code" href="bignum_8h.html#a15c9839c39da2a8dc13255a226d05d87">t_udbl</a>;</div> <div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor">#define POLARSSL_HAVE_UDBL</span></div> <div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div> <div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"></span> <span class="comment">/*</span></div> <div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment"> * 32-bit integers can be forced on 64-bit arches (eg. for testing purposes)</span></div> <div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> * by defining POLARSSL_HAVE_INT32 and undefining POLARSSL_HAVE_ASM</span></div> <div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> */</span></div> <div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"> #if ( ! defined(POLARSSL_HAVE_INT32) && \</span></div> <div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"> defined(_MSC_VER) && defined(_M_AMD64) )</span></div> <div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"></span><span class="preprocessor"> #define POLARSSL_HAVE_INT64</span></div> <div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor"></span> <span class="keyword">typedef</span> int64_t <a class="code" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>;</div> <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">typedef</span> uint64_t <a class="code" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a>;</div> <div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"> #else</span></div> <div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"></span><span class="preprocessor"> #if ( ! defined(POLARSSL_HAVE_INT32) && \</span></div> <div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"> defined(__GNUC__) && ( \</span></div> <div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"> defined(__amd64__) || defined(__x86_64__) || \</span></div> <div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"> defined(__ppc64__) || defined(__powerpc64__) || \</span></div> <div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"> defined(__ia64__) || defined(__alpha__) || \</span></div> <div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor"> (defined(__sparc__) && defined(__arch64__)) || \</span></div> <div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor"> defined(__s390x__) ) )</span></div> <div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"></span><span class="preprocessor"> #define POLARSSL_HAVE_INT64</span></div> <div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"></span> <span class="keyword">typedef</span> int64_t <a class="code" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>;</div> <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">typedef</span> uint64_t <a class="code" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a>;</div> <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a15c9839c39da2a8dc13255a226d05d87">t_udbl</a> __attribute__((mode(TI)));</div> <div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor"> #define POLARSSL_HAVE_UDBL</span></div> <div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"></span><span class="preprocessor"> #else</span></div> <div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="bignum_8h.html#aaa32170d1fc407e0be9ddbce62871c74"> 158</a></span> <span class="preprocessor"></span><span class="preprocessor"> #define POLARSSL_HAVE_INT32</span></div> <div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873"> 159</a></span> <span class="preprocessor"></span> <span class="keyword">typedef</span> int32_t <a class="code" href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a>;</div> <div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9"> 160</a></span>  <span class="keyword">typedef</span> uint32_t <a class="code" href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a>;</div> <div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"> #if ( defined(_MSC_VER) && defined(_M_IX86) )</span></div> <div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"></span> <span class="keyword">typedef</span> uint64_t <a class="code" href="bignum_8h.html#a15c9839c39da2a8dc13255a226d05d87">t_udbl</a>;</div> <div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"> #define POLARSSL_HAVE_UDBL</span></div> <div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor"></span><span class="preprocessor"> #else</span></div> <div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"></span><span class="preprocessor"> #if defined( POLARSSL_HAVE_LONGLONG )</span></div> <div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="bignum_8h.html#a15c9839c39da2a8dc13255a226d05d87"> 166</a></span> <span class="preprocessor"></span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="bignum_8h.html#a15c9839c39da2a8dc13255a226d05d87">t_udbl</a>;</div> <div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="bignum_8h.html#a4f497e14fe66e1d321e4edb73126908b"> 167</a></span> <span class="preprocessor"> #define POLARSSL_HAVE_UDBL</span></div> <div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div> <div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div> <div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"></span><span class="preprocessor"> #endif </span><span class="comment">/* !POLARSSL_HAVE_INT32 && __GNUC__ && 64-bit platform */</span><span class="preprocessor"></span></div> <div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"></span><span class="preprocessor"> #endif </span><span class="comment">/* !POLARSSL_HAVE_INT32 && _MSC_VER && _M_AMD64 */</span><span class="preprocessor"></span></div> <div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* POLARSSL_HAVE_INT16 */</span><span class="preprocessor"></span></div> <div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* POLARSSL_HAVE_INT8 */</span><span class="preprocessor"></span></div> <div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor">#ifdef __cplusplus</span></div> <div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div> <div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="structmpi.html"> 182</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div> <div class="line"><a name="l00183"></a><span class="lineno"> 183</span> {</div> <div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="structmpi.html#ad44e921903bdc7fcc1cadad14784a59a"> 184</a></span>  <span class="keywordtype">int</span> <a class="code" href="structmpi.html#ad44e921903bdc7fcc1cadad14784a59a">s</a>; </div> <div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="structmpi.html#acc8d6d92112b326fcac7c6eff002feb1"> 185</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structmpi.html#acc8d6d92112b326fcac7c6eff002feb1">n</a>; </div> <div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="structmpi.html#aaeeabe339c1cc40d05bdb026666404f8"> 186</a></span>  t_uint *<a class="code" href="structmpi.html#aaeeabe339c1cc40d05bdb026666404f8">p</a>; </div> <div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div> <div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <a class="code" href="structmpi.html">mpi</a>;</div> <div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div> <div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">void</span> <a class="code" href="bignum_8h.html#a201666869f65225d6535bcc697f95c9b">mpi_init</a>( <a class="code" href="structmpi.html">mpi</a> *X );</div> <div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div> <div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordtype">void</span> <a class="code" href="bignum_8h.html#ae1f6507671587755e46bbf0afcae6a8c">mpi_free</a>( <a class="code" href="structmpi.html">mpi</a> *X );</div> <div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div> <div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#ac585f00fc9be270de074e8fbfb508d6a">mpi_grow</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">size_t</span> nblimbs );</div> <div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div> <div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#adaa24d645b3940d17fb6ac1d6fd17408">mpi_shrink</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">size_t</span> nblimbs );</div> <div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div> <div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a6fbcce39a9d92d9e2a560f8aa6a810f4">mpi_copy</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *Y );</div> <div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div> <div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordtype">void</span> <a class="code" href="bignum_8h.html#a5456193a9ebcfe612b93cfb509995a75">mpi_swap</a>( <a class="code" href="structmpi.html">mpi</a> *X, <a class="code" href="structmpi.html">mpi</a> *Y );</div> <div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div> <div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a4022aef0c79b5a7121ee294cc139ae12">mpi_safe_cond_assign</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *Y, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> assign );</div> <div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div> <div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a9128b59005aad61e8d07bedd0c2973b7">mpi_safe_cond_swap</a>( <a class="code" href="structmpi.html">mpi</a> *X, <a class="code" href="structmpi.html">mpi</a> *Y, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> assign );</div> <div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div> <div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a007d6236aebb0ff4a3d92ce8f525a3ae">mpi_lset</a>( <a class="code" href="structmpi.html">mpi</a> *X, t_sint z );</div> <div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div> <div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a920345ada5c75a913b32a00fed3bd36c">mpi_get_bit</a>( <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">size_t</span> pos );</div> <div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div> <div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#ac70dd057e989b021c4a535470d6afec9">mpi_set_bit</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">size_t</span> pos, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="struct__asn1__named__data.html#af1175e54f92e9aaa85fb7a6a27a5511e">val</a> );</div> <div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div> <div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordtype">size_t</span> <a class="code" href="bignum_8h.html#a6d6079272ffa625501f58127172a4f53">mpi_lsb</a>( <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X );</div> <div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div> <div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordtype">size_t</span> <a class="code" href="bignum_8h.html#a4d461a7bff5a31df34bbf93ec00ab886">mpi_msb</a>( <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X );</div> <div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div> <div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordtype">size_t</span> <a class="code" href="bignum_8h.html#a8aa3a3d3aac9e49879ea8cd308859d23">mpi_size</a>( <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X );</div> <div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div> <div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a752d12c301f4e5df56f17e9bc8d78d74">mpi_read_string</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">int</span> radix, <span class="keyword">const</span> <span class="keywordtype">char</span> *s );</div> <div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div> <div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#aac4c8bb7bf5d700277d27b03aed0df7a">mpi_write_string</a>( <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">int</span> radix, <span class="keywordtype">char</span> *s, <span class="keywordtype">size_t</span> *slen );</div> <div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div> <div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor">#if defined(POLARSSL_FS_IO)</span></div> <div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#aa3305289daa8dcc9e70fade0eaa1dc99">mpi_read_file</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">int</span> radix, FILE *fin );</div> <div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div> <div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a6388b8b831a59ae43668857f43e1a907">mpi_write_file</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> *p, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">int</span> radix, FILE *fout );</div> <div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor">#endif </span><span class="comment">/* POLARSSL_FS_IO */</span><span class="preprocessor"></span></div> <div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a0235008cccbf00b8bc03699de8094819">mpi_read_binary</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> buflen );</div> <div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div> <div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a5d464b4312859ce4969d114eb5e02741">mpi_write_binary</a>( <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> buflen );</div> <div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div> <div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a17537330dbe685ca867e52479a8ef7c3">mpi_shift_l</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">size_t</span> count );</div> <div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div> <div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a01de1543da79d0ad0f58916d608f6ff8">mpi_shift_r</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">size_t</span> count );</div> <div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div> <div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a6a692b3d8cd05ae753ab5a39b5634c0a">mpi_cmp_abs</a>( <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *Y );</div> <div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div> <div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#aec20dff9d78738e3c80b212df9875b83">mpi_cmp_mpi</a>( <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *Y );</div> <div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div> <div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#aee6dc030f0fa278c1576c457088b4910">mpi_cmp_int</a>( <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *X, t_sint z );</div> <div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div> <div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a5d1cf13ed3c825b61e0b04085ec30f40">mpi_add_abs</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *B );</div> <div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div> <div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a19d09ef62c09539feb7f9b3045cfb1fe">mpi_sub_abs</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *B );</div> <div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div> <div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#adf5b20e8d8c0a660e4f59f859a0bee18">mpi_add_mpi</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *B );</div> <div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div> <div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a149a13ed93fddb432fb5edd3126b1186">mpi_sub_mpi</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *B );</div> <div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div> <div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a3b88dbe31d038dfae7f27144984f9ae0">mpi_add_int</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, t_sint b );</div> <div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div> <div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#acfdf0f6effb7f976a2f90844c492e160">mpi_sub_int</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, t_sint b );</div> <div class="line"><a name="l00559"></a><span class="lineno"> 559</span> </div> <div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#ab63bfb07b27db84268491cd7d68bddc0">mpi_mul_mpi</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *B );</div> <div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div> <div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a79ee36f6e38e4de6d24047bd685747b4">mpi_mul_int</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, t_sint b );</div> <div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div> <div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a0804ce20a4a1cba3e3dcd3ac520b1ffb">mpi_div_mpi</a>( <a class="code" href="structmpi.html">mpi</a> *Q, <a class="code" href="structmpi.html">mpi</a> *R, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *B );</div> <div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div> <div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a5a81c7b8a4c2a6f6268ac0596a9e7f31">mpi_div_int</a>( <a class="code" href="structmpi.html">mpi</a> *Q, <a class="code" href="structmpi.html">mpi</a> *R, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, t_sint b );</div> <div class="line"><a name="l00618"></a><span class="lineno"> 618</span> </div> <div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a075d3cf21cb3733e5f0a872e72b0cd15">mpi_mod_mpi</a>( <a class="code" href="structmpi.html">mpi</a> *R, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *B );</div> <div class="line"><a name="l00632"></a><span class="lineno"> 632</span> </div> <div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a8cf9128e5d55fd1e95696fe8cb405b92">mpi_mod_int</a>( t_uint *r, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, t_sint b );</div> <div class="line"><a name="l00646"></a><span class="lineno"> 646</span> </div> <div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a84befed1943a584332e0599605b0d3fe">mpi_exp_mod</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *E, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *N, <a class="code" href="structmpi.html">mpi</a> *_RR );</div> <div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div> <div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a5ac8858041a8d5b49c11d38fd4069975">mpi_fill_random</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">size_t</span> size,</div> <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordtype">int</span> (*f_rng)(<span class="keywordtype">void</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *, <span class="keywordtype">size_t</span>),</div> <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordtype">void</span> *p_rng );</div> <div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div> <div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#ab1448e8d36dbf542b2230131da8298aa">mpi_gcd</a>( <a class="code" href="structmpi.html">mpi</a> *G, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *B );</div> <div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div> <div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a090616da16b87653c025874e1675da79">mpi_inv_mod</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *A, <span class="keyword">const</span> <a class="code" href="structmpi.html">mpi</a> *N );</div> <div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div> <div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#adf23b7959312c2fcf222d7ce6ac32320">mpi_is_prime</a>( <a class="code" href="structmpi.html">mpi</a> *X,</div> <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keywordtype">int</span> (*f_rng)(<span class="keywordtype">void</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *, <span class="keywordtype">size_t</span>),</div> <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordtype">void</span> *p_rng );</div> <div class="line"><a name="l00722"></a><span class="lineno"> 722</span> </div> <div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#a39480daedc47c4eae7574a6d028f352c">mpi_gen_prime</a>( <a class="code" href="structmpi.html">mpi</a> *X, <span class="keywordtype">size_t</span> nbits, <span class="keywordtype">int</span> dh_flag,</div> <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keywordtype">int</span> (*f_rng)(<span class="keywordtype">void</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *, <span class="keywordtype">size_t</span>),</div> <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordtype">void</span> *p_rng );</div> <div class="line"><a name="l00740"></a><span class="lineno"> 740</span> </div> <div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keywordtype">int</span> <a class="code" href="bignum_8h.html#ab21c92239348bc2c84513968a3e391b2">mpi_self_test</a>( <span class="keywordtype">int</span> verbose );</div> <div class="line"><a name="l00747"></a><span class="lineno"> 747</span> </div> <div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="preprocessor">#ifdef __cplusplus</span></div> <div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="preprocessor"></span>}</div> <div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="preprocessor">#endif </span><span class="comment">/* bignum.h */</span><span class="preprocessor"></span></div> <div class="ttc" id="bignum_8h_html_aee6dc030f0fa278c1576c457088b4910"><div class="ttname"><a href="bignum_8h.html#aee6dc030f0fa278c1576c457088b4910">mpi_cmp_int</a></div><div class="ttdeci">int mpi_cmp_int(const mpi *X, t_sint z)</div><div class="ttdoc">Compare signed values. </div></div> <div class="ttc" id="bignum_8h_html_a5456193a9ebcfe612b93cfb509995a75"><div class="ttname"><a href="bignum_8h.html#a5456193a9ebcfe612b93cfb509995a75">mpi_swap</a></div><div class="ttdeci">void mpi_swap(mpi *X, mpi *Y)</div><div class="ttdoc">Swap the contents of X and Y. </div></div> <div class="ttc" id="bignum_8h_html_adaa24d645b3940d17fb6ac1d6fd17408"><div class="ttname"><a href="bignum_8h.html#adaa24d645b3940d17fb6ac1d6fd17408">mpi_shrink</a></div><div class="ttdeci">int mpi_shrink(mpi *X, size_t nblimbs)</div><div class="ttdoc">Resize down, keeping at least the specified number of limbs. </div></div> <div class="ttc" id="bignum_8h_html_a4022aef0c79b5a7121ee294cc139ae12"><div class="ttname"><a href="bignum_8h.html#a4022aef0c79b5a7121ee294cc139ae12">mpi_safe_cond_assign</a></div><div class="ttdeci">int mpi_safe_cond_assign(mpi *X, const mpi *Y, unsigned char assign)</div><div class="ttdoc">Safe conditional assignement X = Y if assign is 1. </div></div> <div class="ttc" id="bignum_8h_html_ad5d1464f801a0e7d2ed32a8f8dc2ccc9"><div class="ttname"><a href="bignum_8h.html#ad5d1464f801a0e7d2ed32a8f8dc2ccc9">t_uint</a></div><div class="ttdeci">uint32_t t_uint</div><div class="ttdef"><b>Definition:</b> <a href="bignum_8h_source.html#l00160">bignum.h:160</a></div></div> <div class="ttc" id="bignum_8h_html_a5a81c7b8a4c2a6f6268ac0596a9e7f31"><div class="ttname"><a href="bignum_8h.html#a5a81c7b8a4c2a6f6268ac0596a9e7f31">mpi_div_int</a></div><div class="ttdeci">int mpi_div_int(mpi *Q, mpi *R, const mpi *A, t_sint b)</div><div class="ttdoc">Division by int: A = Q * b + R. </div></div> <div class="ttc" id="bignum_8h_html_ab1448e8d36dbf542b2230131da8298aa"><div class="ttname"><a href="bignum_8h.html#ab1448e8d36dbf542b2230131da8298aa">mpi_gcd</a></div><div class="ttdeci">int mpi_gcd(mpi *G, const mpi *A, const mpi *B)</div><div class="ttdoc">Greatest common divisor: G = gcd(A, B) </div></div> <div class="ttc" id="structmpi_html_ad44e921903bdc7fcc1cadad14784a59a"><div class="ttname"><a href="structmpi.html#ad44e921903bdc7fcc1cadad14784a59a">mpi::s</a></div><div class="ttdeci">int s</div><div class="ttdef"><b>Definition:</b> <a href="bignum_8h_source.html#l00184">bignum.h:184</a></div></div> <div class="ttc" id="bignum_8h_html_a5ac8858041a8d5b49c11d38fd4069975"><div class="ttname"><a href="bignum_8h.html#a5ac8858041a8d5b49c11d38fd4069975">mpi_fill_random</a></div><div class="ttdeci">int mpi_fill_random(mpi *X, size_t size, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</div><div class="ttdoc">Fill an MPI X with size bytes of random. </div></div> <div class="ttc" id="bignum_8h_html_a19d09ef62c09539feb7f9b3045cfb1fe"><div class="ttname"><a href="bignum_8h.html#a19d09ef62c09539feb7f9b3045cfb1fe">mpi_sub_abs</a></div><div class="ttdeci">int mpi_sub_abs(mpi *X, const mpi *A, const mpi *B)</div><div class="ttdoc">Unsigned subtraction: X = |A| - |B|. </div></div> <div class="ttc" id="bignum_8h_html_a6a692b3d8cd05ae753ab5a39b5634c0a"><div class="ttname"><a href="bignum_8h.html#a6a692b3d8cd05ae753ab5a39b5634c0a">mpi_cmp_abs</a></div><div class="ttdeci">int mpi_cmp_abs(const mpi *X, const mpi *Y)</div><div class="ttdoc">Compare unsigned values. </div></div> <div class="ttc" id="config_8h_html"><div class="ttname"><a href="config_8h.html">config.h</a></div><div class="ttdoc">Configuration options (set of defines) </div></div> <div class="ttc" id="bignum_8h_html_a3b88dbe31d038dfae7f27144984f9ae0"><div class="ttname"><a href="bignum_8h.html#a3b88dbe31d038dfae7f27144984f9ae0">mpi_add_int</a></div><div class="ttdeci">int mpi_add_int(mpi *X, const mpi *A, t_sint b)</div><div class="ttdoc">Signed addition: X = A + b. </div></div> <div class="ttc" id="bignum_8h_html_aa3305289daa8dcc9e70fade0eaa1dc99"><div class="ttname"><a href="bignum_8h.html#aa3305289daa8dcc9e70fade0eaa1dc99">mpi_read_file</a></div><div class="ttdeci">int mpi_read_file(mpi *X, int radix, FILE *fin)</div><div class="ttdoc">Read X from an opened file. </div></div> <div class="ttc" id="bignum_8h_html_a0804ce20a4a1cba3e3dcd3ac520b1ffb"><div class="ttname"><a href="bignum_8h.html#a0804ce20a4a1cba3e3dcd3ac520b1ffb">mpi_div_mpi</a></div><div class="ttdeci">int mpi_div_mpi(mpi *Q, mpi *R, const mpi *A, const mpi *B)</div><div class="ttdoc">Division by mpi: A = Q * B + R. </div></div> <div class="ttc" id="bignum_8h_html_a007d6236aebb0ff4a3d92ce8f525a3ae"><div class="ttname"><a href="bignum_8h.html#a007d6236aebb0ff4a3d92ce8f525a3ae">mpi_lset</a></div><div class="ttdeci">int mpi_lset(mpi *X, t_sint z)</div><div class="ttdoc">Set value from integer. </div></div> <div class="ttc" id="bignum_8h_html_adf23b7959312c2fcf222d7ce6ac32320"><div class="ttname"><a href="bignum_8h.html#adf23b7959312c2fcf222d7ce6ac32320">mpi_is_prime</a></div><div class="ttdeci">int mpi_is_prime(mpi *X, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</div><div class="ttdoc">Miller-Rabin primality test. </div></div> <div class="ttc" id="structmpi_html"><div class="ttname"><a href="structmpi.html">mpi</a></div><div class="ttdoc">MPI structure. </div><div class="ttdef"><b>Definition:</b> <a href="bignum_8h_source.html#l00182">bignum.h:182</a></div></div> <div class="ttc" id="bignum_8h_html_a6388b8b831a59ae43668857f43e1a907"><div class="ttname"><a href="bignum_8h.html#a6388b8b831a59ae43668857f43e1a907">mpi_write_file</a></div><div class="ttdeci">int mpi_write_file(const char *p, const mpi *X, int radix, FILE *fout)</div><div class="ttdoc">Write X into an opened file, or stdout if fout is NULL. </div></div> <div class="ttc" id="bignum_8h_html_a201666869f65225d6535bcc697f95c9b"><div class="ttname"><a href="bignum_8h.html#a201666869f65225d6535bcc697f95c9b">mpi_init</a></div><div class="ttdeci">void mpi_init(mpi *X)</div><div class="ttdoc">Initialize one MPI. </div></div> <div class="ttc" id="bignum_8h_html_aec20dff9d78738e3c80b212df9875b83"><div class="ttname"><a href="bignum_8h.html#aec20dff9d78738e3c80b212df9875b83">mpi_cmp_mpi</a></div><div class="ttdeci">int mpi_cmp_mpi(const mpi *X, const mpi *Y)</div><div class="ttdoc">Compare signed values. </div></div> <div class="ttc" id="bignum_8h_html_a15c9839c39da2a8dc13255a226d05d87"><div class="ttname"><a href="bignum_8h.html#a15c9839c39da2a8dc13255a226d05d87">t_udbl</a></div><div class="ttdeci">unsigned long long t_udbl</div><div class="ttdef"><b>Definition:</b> <a href="bignum_8h_source.html#l00166">bignum.h:166</a></div></div> <div class="ttc" id="bignum_8h_html_a01de1543da79d0ad0f58916d608f6ff8"><div class="ttname"><a href="bignum_8h.html#a01de1543da79d0ad0f58916d608f6ff8">mpi_shift_r</a></div><div class="ttdeci">int mpi_shift_r(mpi *X, size_t count)</div><div class="ttdoc">Right-shift: X &gt;&gt;= count. </div></div> <div class="ttc" id="bignum_8h_html_adf5b20e8d8c0a660e4f59f859a0bee18"><div class="ttname"><a href="bignum_8h.html#adf5b20e8d8c0a660e4f59f859a0bee18">mpi_add_mpi</a></div><div class="ttdeci">int mpi_add_mpi(mpi *X, const mpi *A, const mpi *B)</div><div class="ttdoc">Signed addition: X = A + B. </div></div> <div class="ttc" id="struct__asn1__named__data_html_af1175e54f92e9aaa85fb7a6a27a5511e"><div class="ttname"><a href="struct__asn1__named__data.html#af1175e54f92e9aaa85fb7a6a27a5511e">_asn1_named_data::val</a></div><div class="ttdeci">asn1_buf val</div><div class="ttdoc">The named value. </div><div class="ttdef"><b>Definition:</b> <a href="asn1_8h_source.html#l00159">asn1.h:159</a></div></div> <div class="ttc" id="bignum_8h_html_aac4c8bb7bf5d700277d27b03aed0df7a"><div class="ttname"><a href="bignum_8h.html#aac4c8bb7bf5d700277d27b03aed0df7a">mpi_write_string</a></div><div class="ttdeci">int mpi_write_string(const mpi *X, int radix, char *s, size_t *slen)</div><div class="ttdoc">Export into an ASCII string. </div></div> <div class="ttc" id="bignum_8h_html_abbc933ccc2d1d02925e6886d9b4f5873"><div class="ttname"><a href="bignum_8h.html#abbc933ccc2d1d02925e6886d9b4f5873">t_sint</a></div><div class="ttdeci">int32_t t_sint</div><div class="ttdef"><b>Definition:</b> <a href="bignum_8h_source.html#l00159">bignum.h:159</a></div></div> <div class="ttc" id="bignum_8h_html_a6d6079272ffa625501f58127172a4f53"><div class="ttname"><a href="bignum_8h.html#a6d6079272ffa625501f58127172a4f53">mpi_lsb</a></div><div class="ttdeci">size_t mpi_lsb(const mpi *X)</div><div class="ttdoc">Return the number of zero-bits before the least significant &#39;1&#39; bit. </div></div> <div class="ttc" id="bignum_8h_html_a090616da16b87653c025874e1675da79"><div class="ttname"><a href="bignum_8h.html#a090616da16b87653c025874e1675da79">mpi_inv_mod</a></div><div class="ttdeci">int mpi_inv_mod(mpi *X, const mpi *A, const mpi *N)</div><div class="ttdoc">Modular inverse: X = A^-1 mod N. </div></div> <div class="ttc" id="bignum_8h_html_ae1f6507671587755e46bbf0afcae6a8c"><div class="ttname"><a href="bignum_8h.html#ae1f6507671587755e46bbf0afcae6a8c">mpi_free</a></div><div class="ttdeci">void mpi_free(mpi *X)</div><div class="ttdoc">Unallocate one MPI. </div></div> <div class="ttc" id="bignum_8h_html_a79ee36f6e38e4de6d24047bd685747b4"><div class="ttname"><a href="bignum_8h.html#a79ee36f6e38e4de6d24047bd685747b4">mpi_mul_int</a></div><div class="ttdeci">int mpi_mul_int(mpi *X, const mpi *A, t_sint b)</div><div class="ttdoc">Baseline multiplication: X = A * b Note: despite the functon signature, b is treated as a t_uint...</div></div> <div class="ttc" id="bignum_8h_html_ac585f00fc9be270de074e8fbfb508d6a"><div class="ttname"><a href="bignum_8h.html#ac585f00fc9be270de074e8fbfb508d6a">mpi_grow</a></div><div class="ttdeci">int mpi_grow(mpi *X, size_t nblimbs)</div><div class="ttdoc">Enlarge to the specified number of limbs. </div></div> <div class="ttc" id="bignum_8h_html_a8cf9128e5d55fd1e95696fe8cb405b92"><div class="ttname"><a href="bignum_8h.html#a8cf9128e5d55fd1e95696fe8cb405b92">mpi_mod_int</a></div><div class="ttdeci">int mpi_mod_int(t_uint *r, const mpi *A, t_sint b)</div><div class="ttdoc">Modulo: r = A mod b. </div></div> <div class="ttc" id="bignum_8h_html_a84befed1943a584332e0599605b0d3fe"><div class="ttname"><a href="bignum_8h.html#a84befed1943a584332e0599605b0d3fe">mpi_exp_mod</a></div><div class="ttdeci">int mpi_exp_mod(mpi *X, const mpi *A, const mpi *E, const mpi *N, mpi *_RR)</div><div class="ttdoc">Sliding-window exponentiation: X = A^E mod N. </div></div> <div class="ttc" id="bignum_8h_html_a39480daedc47c4eae7574a6d028f352c"><div class="ttname"><a href="bignum_8h.html#a39480daedc47c4eae7574a6d028f352c">mpi_gen_prime</a></div><div class="ttdeci">int mpi_gen_prime(mpi *X, size_t nbits, int dh_flag, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</div><div class="ttdoc">Prime number generation. </div></div> <div class="ttc" id="bignum_8h_html_a4d461a7bff5a31df34bbf93ec00ab886"><div class="ttname"><a href="bignum_8h.html#a4d461a7bff5a31df34bbf93ec00ab886">mpi_msb</a></div><div class="ttdeci">size_t mpi_msb(const mpi *X)</div><div class="ttdoc">Return the number of bits up to and including the most significant &#39;1&#39; bit&#39;. </div></div> <div class="ttc" id="bignum_8h_html_a5d1cf13ed3c825b61e0b04085ec30f40"><div class="ttname"><a href="bignum_8h.html#a5d1cf13ed3c825b61e0b04085ec30f40">mpi_add_abs</a></div><div class="ttdeci">int mpi_add_abs(mpi *X, const mpi *A, const mpi *B)</div><div class="ttdoc">Unsigned addition: X = |A| + |B|. </div></div> <div class="ttc" id="bignum_8h_html_a752d12c301f4e5df56f17e9bc8d78d74"><div class="ttname"><a href="bignum_8h.html#a752d12c301f4e5df56f17e9bc8d78d74">mpi_read_string</a></div><div class="ttdeci">int mpi_read_string(mpi *X, int radix, const char *s)</div><div class="ttdoc">Import from an ASCII string. </div></div> <div class="ttc" id="structmpi_html_aaeeabe339c1cc40d05bdb026666404f8"><div class="ttname"><a href="structmpi.html#aaeeabe339c1cc40d05bdb026666404f8">mpi::p</a></div><div class="ttdeci">t_uint * p</div><div class="ttdef"><b>Definition:</b> <a href="bignum_8h_source.html#l00186">bignum.h:186</a></div></div> <div class="ttc" id="bignum_8h_html_a0235008cccbf00b8bc03699de8094819"><div class="ttname"><a href="bignum_8h.html#a0235008cccbf00b8bc03699de8094819">mpi_read_binary</a></div><div class="ttdeci">int mpi_read_binary(mpi *X, const unsigned char *buf, size_t buflen)</div><div class="ttdoc">Import X from unsigned binary data, big endian. </div></div> <div class="ttc" id="bignum_8h_html_ab21c92239348bc2c84513968a3e391b2"><div class="ttname"><a href="bignum_8h.html#ab21c92239348bc2c84513968a3e391b2">mpi_self_test</a></div><div class="ttdeci">int mpi_self_test(int verbose)</div><div class="ttdoc">Checkup routine. </div></div> <div class="ttc" id="bignum_8h_html_a8aa3a3d3aac9e49879ea8cd308859d23"><div class="ttname"><a href="bignum_8h.html#a8aa3a3d3aac9e49879ea8cd308859d23">mpi_size</a></div><div class="ttdeci">size_t mpi_size(const mpi *X)</div><div class="ttdoc">Return the total size in bytes. </div></div> <div class="ttc" id="bignum_8h_html_a6fbcce39a9d92d9e2a560f8aa6a810f4"><div class="ttname"><a href="bignum_8h.html#a6fbcce39a9d92d9e2a560f8aa6a810f4">mpi_copy</a></div><div class="ttdeci">int mpi_copy(mpi *X, const mpi *Y)</div><div class="ttdoc">Copy the contents of Y into X. </div></div> <div class="ttc" id="structmpi_html_acc8d6d92112b326fcac7c6eff002feb1"><div class="ttname"><a href="structmpi.html#acc8d6d92112b326fcac7c6eff002feb1">mpi::n</a></div><div class="ttdeci">size_t n</div><div class="ttdef"><b>Definition:</b> <a href="bignum_8h_source.html#l00185">bignum.h:185</a></div></div> <div class="ttc" id="bignum_8h_html_a075d3cf21cb3733e5f0a872e72b0cd15"><div class="ttname"><a href="bignum_8h.html#a075d3cf21cb3733e5f0a872e72b0cd15">mpi_mod_mpi</a></div><div class="ttdeci">int mpi_mod_mpi(mpi *R, const mpi *A, const mpi *B)</div><div class="ttdoc">Modulo: R = A mod B. </div></div> <div class="ttc" id="bignum_8h_html_a920345ada5c75a913b32a00fed3bd36c"><div class="ttname"><a href="bignum_8h.html#a920345ada5c75a913b32a00fed3bd36c">mpi_get_bit</a></div><div class="ttdeci">int mpi_get_bit(const mpi *X, size_t pos)</div><div class="ttdoc">Get a specific bit from X. </div></div> <div class="ttc" id="bignum_8h_html_a5d464b4312859ce4969d114eb5e02741"><div class="ttname"><a href="bignum_8h.html#a5d464b4312859ce4969d114eb5e02741">mpi_write_binary</a></div><div class="ttdeci">int mpi_write_binary(const mpi *X, unsigned char *buf, size_t buflen)</div><div class="ttdoc">Export X into unsigned binary data, big endian. </div></div> <div class="ttc" id="bignum_8h_html_a17537330dbe685ca867e52479a8ef7c3"><div class="ttname"><a href="bignum_8h.html#a17537330dbe685ca867e52479a8ef7c3">mpi_shift_l</a></div><div class="ttdeci">int mpi_shift_l(mpi *X, size_t count)</div><div class="ttdoc">Left-shift: X &lt;&lt;= count. </div></div> <div class="ttc" id="bignum_8h_html_a9128b59005aad61e8d07bedd0c2973b7"><div class="ttname"><a href="bignum_8h.html#a9128b59005aad61e8d07bedd0c2973b7">mpi_safe_cond_swap</a></div><div class="ttdeci">int mpi_safe_cond_swap(mpi *X, mpi *Y, unsigned char assign)</div><div class="ttdoc">Safe conditional swap X &lt;-&gt; Y if swap is 1. </div></div> <div class="ttc" id="bignum_8h_html_ab63bfb07b27db84268491cd7d68bddc0"><div class="ttname"><a href="bignum_8h.html#ab63bfb07b27db84268491cd7d68bddc0">mpi_mul_mpi</a></div><div class="ttdeci">int mpi_mul_mpi(mpi *X, const mpi *A, const mpi *B)</div><div class="ttdoc">Baseline multiplication: X = A * B. </div></div> <div class="ttc" id="bignum_8h_html_a149a13ed93fddb432fb5edd3126b1186"><div class="ttname"><a href="bignum_8h.html#a149a13ed93fddb432fb5edd3126b1186">mpi_sub_mpi</a></div><div class="ttdeci">int mpi_sub_mpi(mpi *X, const mpi *A, const mpi *B)</div><div class="ttdoc">Signed subtraction: X = A - B. </div></div> <div class="ttc" id="bignum_8h_html_ac70dd057e989b021c4a535470d6afec9"><div class="ttname"><a href="bignum_8h.html#ac70dd057e989b021c4a535470d6afec9">mpi_set_bit</a></div><div class="ttdeci">int mpi_set_bit(mpi *X, size_t pos, unsigned char val)</div><div class="ttdoc">Set a bit of X to a specific value of 0 or 1. </div></div> <div class="ttc" id="bignum_8h_html_acfdf0f6effb7f976a2f90844c492e160"><div class="ttname"><a href="bignum_8h.html#acfdf0f6effb7f976a2f90844c492e160">mpi_sub_int</a></div><div class="ttdeci">int mpi_sub_int(mpi *X, const mpi *A, t_sint b)</div><div class="ttdoc">Signed subtraction: X = A - b. </div></div> </div><!-- fragment --></div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Thu Jul 31 2014 11:35:51 for PolarSSL v1.3.8 by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.5 </small></address> </body> </html>