⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modarith_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00079 <span class="keyword">                </span>{<span class="keywordflow">return</span> result1 = a.Squared()%modulus;}00080 00081         <span class="keywordtype">bool</span> IsUnit(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;a)<span class="keyword"> const</span>00082 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_integer.html#_integerz49_12">Integer::Gcd</a>(a, modulus).<a class="code" href="class_integer.html#_integerz49_5">IsUnit</a>();}00083 00084         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a>&amp; MultiplicativeInverse(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;a)<span class="keyword"> const</span>00085 <span class="keyword">                </span>{<span class="keywordflow">return</span> result1 = a.InverseMod(modulus);}00086 00087         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a>&amp; Divide(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;b)<span class="keyword"> const</span>00088 <span class="keyword">                </span>{<span class="keywordflow">return</span> Multiply(a, MultiplicativeInverse(b));}00089 00090         <a class="code" href="class_integer.html">Integer</a> CascadeExponentiate(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;x, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e1, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;y, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e2) <span class="keyword">const</span>;00091 00092         <span class="keywordtype">void</span> SimultaneousExponentiate(<a class="code" href="class_integer.html">Element</a> *results, <span class="keyword">const</span> <a class="code" href="class_integer.html">Element</a> &amp;base, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> *exponents, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exponentsCount) <span class="keyword">const</span>;00093 00094         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MaxElementBitLength()<span class="keyword"> const</span>00095 <span class="keyword">                </span>{<span class="keywordflow">return</span> (modulus-1).BitCount();}00096 00097         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MaxElementByteLength()<span class="keyword"> const</span>00098 <span class="keyword">                </span>{<span class="keywordflow">return</span> (modulus-1).ByteCount();}00099 00100         <a class="code" href="class_integer.html">Element</a> RandomElement( <a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng , <span class="keyword">const</span> RandomizationParameter &amp;ignore_for_now = 0 ) <span class="keyword">const</span>00101                 <span class="comment">// left RandomizationParameter arg as ref in case RandomizationParameter becomes a more complicated struct</span>00102         { 00103                 <span class="keywordflow">return</span> <a class="code" href="class_integer.html">Element</a>( rng , <a class="code" href="class_integer.html">Integer</a>( (<span class="keywordtype">long</span>) 0) , modulus - <a class="code" href="class_integer.html">Integer</a>( (<span class="keywordtype">long</span>) 1 )   ) ; 00104         }   00105 00106         <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> ModularArithmetic &amp;rhs)<span class="keyword"> const</span>00107 <span class="keyword">                </span>{<span class="keywordflow">return</span> modulus == rhs.<a class="code" href="class_modular_arithmetic.html#_montgomery_representationp0">modulus</a>;}00108 00109         <span class="keyword">static</span> <span class="keyword">const</span> RandomizationParameter DefaultRandomizationParameter ;00110 00111 <span class="keyword">protected</span>:00112         <a class="code" href="class_integer.html">Integer</a> modulus;00113         <span class="keyword">mutable</span> <a class="code" href="class_integer.html">Integer</a> result, result1;00114 00115 };00116 00117 <span class="comment">// const ModularArithmetic::RandomizationParameter ModularArithmetic::DefaultRandomizationParameter = 0 ;</span>00118 <span class="comment"></span>00119 <span class="comment">//! do modular arithmetics in Montgomery representation for increased speed</span><a name="l00120"></a><a class="code" href="class_montgomery_representation.html">00120</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL MontgomeryRepresentation : <span class="keyword">public</span> ModularArithmetic00121 {00122 <span class="keyword">public</span>:00123         MontgomeryRepresentation(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;modulus);       <span class="comment">// modulus must be odd</span>00124 00125         <span class="keyword">virtual</span> ModularArithmetic * Clone()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">new</span> MontgomeryRepresentation(*<span class="keyword">this</span>);}00126 00127         <span class="keywordtype">bool</span> IsMontgomeryRepresentation()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00128 00129         <a class="code" href="class_integer.html">Integer</a> ConvertIn(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;a)<span class="keyword"> const</span>00130 <span class="keyword">                </span>{<span class="keywordflow">return</span> (a&lt;&lt;(WORD_BITS*modulus.reg.size()))%modulus;}00131 00132         <a class="code" href="class_integer.html">Integer</a> ConvertOut(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;a) <span class="keyword">const</span>;00133 00134         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a>&amp; MultiplicativeIdentity()<span class="keyword"> const</span>00135 <span class="keyword">                </span>{<span class="keywordflow">return</span> result1 = <a class="code" href="class_integer.html#_integerz37_13">Integer::Power2</a>(WORD_BITS*modulus.reg.size())%modulus;}00136 00137         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a>&amp; Multiply(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;b) <span class="keyword">const</span>;00138 00139         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a>&amp; <a class="code" href="class_square.html">Square</a>(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;a) <span class="keyword">const</span>;00140 00141         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a>&amp; MultiplicativeInverse(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;a) <span class="keyword">const</span>;00142 00143         <a class="code" href="class_integer.html">Integer</a> CascadeExponentiate(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;x, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e1, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;y, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e2)<span class="keyword"> const</span>00144 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_abstract_ring.html">AbstractRing&lt;Integer&gt;::CascadeExponentiate</a>(x, e1, y, e2);}00145 00146         <span class="keywordtype">void</span> SimultaneousExponentiate(Element *results, <span class="keyword">const</span> Element &amp;base, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> *exponents, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exponentsCount)<span class="keyword"> const</span>00147 <span class="keyword">                </span>{<a class="code" href="class_abstract_ring.html">AbstractRing&lt;Integer&gt;::SimultaneousExponentiate</a>(results, base, exponents, exponentsCount);}00148 00149 <span class="keyword">private</span>:00150         <a class="code" href="class_integer.html">Integer</a> u;00151         <span class="keyword">mutable</span> <a class="code" href="class_sec_block.html">SecAlignedWordBlock</a> workspace;00152 };00153 00154 NAMESPACE_END00155 00156 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:20 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -