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

📄 xtr_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00109                 modp.Accumulate(a.c2, b.c2);00110                 <span class="keywordflow">return</span> a;00111         }00112 00113         Element&amp; Reduce(Element &amp;a, <span class="keyword">const</span> Element &amp;b)<span class="keyword"> const</span>00114 <span class="keyword">        </span>{00115                 modp.Reduce(a.c1, b.c1);00116                 modp.Reduce(a.c2, b.c2);00117                 <span class="keywordflow">return</span> a;00118         }00119 00120         <span class="keywordtype">bool</span> IsUnit(<span class="keyword">const</span> Element &amp;a)<span class="keyword"> const</span>00121 <span class="keyword">        </span>{00122                 <span class="keywordflow">return</span> a.c1.NotZero() || a.c2.NotZero();00123         }00124 00125         <span class="keyword">const</span> Element&amp; MultiplicativeIdentity()<span class="keyword"> const</span>00126 <span class="keyword">        </span>{00127                 result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a> = result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a> = modp.Inverse(modp.MultiplicativeIdentity());00128                 <span class="keywordflow">return</span> result;00129         }00130 00131         <span class="keyword">const</span> Element&amp; Multiply(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b)<span class="keyword"> const</span>00132 <span class="keyword">        </span>{00133                 t = modp.Add(a.c1, a.c2);00134                 t = modp.Multiply(t, modp.Add(b.c1, b.c2));00135                 result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a> = modp.Multiply(a.c1, b.c1);00136                 result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a> = modp.Multiply(a.c2, b.c2);00137                 result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>.<a class="code" href="class_integer.html#_integerz43_20">swap</a>(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>);00138                 modp.Reduce(t, result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>);00139                 modp.Reduce(t, result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>);00140                 modp.Reduce(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>, t);00141                 modp.Reduce(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>, t);00142                 <span class="keywordflow">return</span> result;00143         }00144 00145         <span class="keyword">const</span> Element&amp; MultiplicativeInverse(<span class="keyword">const</span> Element &amp;a)<span class="keyword"> const</span>00146 <span class="keyword">        </span>{00147                 <span class="keywordflow">return</span> result = Exponentiate(a, modp.GetModulus()-2);00148         }00149 00150         <span class="keyword">const</span> Element&amp; <a class="code" href="class_square.html">Square</a>(<span class="keyword">const</span> Element &amp;a)<span class="keyword"> const</span>00151 <span class="keyword">        </span>{00152                 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;ac1 = (&amp;a == &amp;result) ? (t = a.c1) : a.c1;00153                 result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a> = modp.Multiply(modp.Subtract(modp.Subtract(a.c2, a.c1), a.c1), a.c2);00154                 result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a> = modp.Multiply(modp.Subtract(modp.Subtract(ac1, a.c2), a.c2), ac1);00155                 <span class="keywordflow">return</span> result;00156         }00157 00158         Element Exponentiate(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e)<span class="keyword"> const</span>00159 <span class="keyword">        </span>{00160                 <a class="code" href="class_integer.html">Integer</a> edivp, emodp;00161                 <a class="code" href="class_integer.html#_integerz49_9">Integer::Divide</a>(emodp, edivp, e, modp.GetModulus());00162                 Element b = PthPower(a);00163                 <span class="keywordflow">return</span> <a class="code" href="class_abstract_ring.html">AbstractRing&lt;GFP2Element&gt;::CascadeExponentiate</a>(a, emodp, b, edivp);00164         }00165 00166         <span class="keyword">const</span> Element &amp; PthPower(<span class="keyword">const</span> Element &amp;a)<span class="keyword"> const</span>00167 <span class="keyword">        </span>{00168                 result = a;00169                 result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>.<a class="code" href="class_integer.html#_integerz43_20">swap</a>(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>);00170                 <span class="keywordflow">return</span> result;00171         }00172 00173         <span class="keywordtype">void</span> RaiseToPthPower(Element &amp;a)<span class="keyword"> const</span>00174 <span class="keyword">        </span>{00175                 a.c1.swap(a.c2);00176         }00177 00178         <span class="comment">// a^2 - 2a^p</span>00179         <span class="keyword">const</span> Element &amp; SpecialOperation1(<span class="keyword">const</span> Element &amp;a)<span class="keyword"> const</span>00180 <span class="keyword">        </span>{00181                 assert(&amp;a != &amp;result);00182                 result = Square(a);00183                 modp.Reduce(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>, a.c2);00184                 modp.Reduce(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>, a.c2);00185                 modp.Reduce(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>, a.c1);00186                 modp.Reduce(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>, a.c1);00187                 <span class="keywordflow">return</span> result;00188         }00189 00190         <span class="comment">// x * z - y * z^p</span>00191         <span class="keyword">const</span> Element &amp; SpecialOperation2(<span class="keyword">const</span> Element &amp;x, <span class="keyword">const</span> Element &amp;y, <span class="keyword">const</span> Element &amp;z)<span class="keyword"> const</span>00192 <span class="keyword">        </span>{00193                 assert(&amp;x != &amp;result &amp;&amp; &amp;y != &amp;result &amp;&amp; &amp;z != &amp;result);00194                 t = modp.Add(x.c2, y.c2);00195                 result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a> = modp.Multiply(z.c1, modp.Subtract(y.c1, t));00196                 modp.Accumulate(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>, modp.Multiply(z.c2, modp.Subtract(t, x.c1)));00197                 t = modp.Add(x.c1, y.c1);00198                 result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a> = modp.Multiply(z.c2, modp.Subtract(y.c2, t));00199                 modp.Accumulate(result.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>, modp.Multiply(z.c1, modp.Subtract(t, x.c2)));00200                 <span class="keywordflow">return</span> result;00201         }00202 00203 <span class="keyword">protected</span>:00204         BaseField modp;00205         <span class="keyword">mutable</span> <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> result;00206         <span class="keyword">mutable</span> <a class="code" href="class_integer.html">Integer</a> t;00207 };00208 00209 <span class="keywordtype">void</span> XTR_FindPrimesAndGenerator(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <a class="code" href="class_integer.html">Integer</a> &amp;p, <a class="code" href="class_integer.html">Integer</a> &amp;q, <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> &amp;g, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> pbits, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> qbits);00210 00211 <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> XTR_Exponentiate(<span class="keyword">const</span> <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> &amp;b, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;p);00212 00213 NAMESPACE_END00214 00215 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:28 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 + -