📄 modarith_8h-source.html
字号:
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> &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>& MultiplicativeInverse(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &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>& Divide(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &a, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &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> &x, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &e1, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &y, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &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> &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> &rng , <span class="keyword">const</span> RandomizationParameter &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 &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> &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> &a)<span class="keyword"> const</span>00130 <span class="keyword"> </span>{<span class="keywordflow">return</span> (a<<(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> &a) <span class="keyword">const</span>;00133 00134 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a>& 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>& Multiply(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &a, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &b) <span class="keyword">const</span>;00138 00139 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a>& <a class="code" href="class_square.html">Square</a>(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &a) <span class="keyword">const</span>;00140 00141 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a>& MultiplicativeInverse(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &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> &x, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &e1, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &y, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &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<Integer>::CascadeExponentiate</a>(x, e1, y, e2);}00145 00146 <span class="keywordtype">void</span> SimultaneousExponentiate(Element *results, <span class="keyword">const</span> Element &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<Integer>::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 + -