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

📄 rw_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00123 <span class="keyword">template</span> &lt;word r&gt;<a name="l00124"></a><a class="code" href="class_r_w_function.html#_r_w_functiona7">00124</a> <span class="keywordtype">bool</span> <a class="code" href="class_r_w_function.html#_r_w_functiona7">RWFunction&lt;r&gt;::GetVoidValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &amp;valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const</span>00125 <span class="keyword"></span>{00126         <span class="keywordflow">return</span> GetValueHelper(<span class="keyword">this</span>, name, valueType, pValue).Assignable()00127                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a15">Modulus</a>)00128                 ;00129 }00130 00131 <span class="keyword">template</span> &lt;word r&gt;<a name="l00132"></a><a class="code" href="class_r_w_function.html#_r_w_functiona8">00132</a> <span class="keywordtype">void</span> <a class="code" href="class_r_w_function.html#_r_w_functiona8">RWFunction&lt;r&gt;::AssignFrom</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source)00133 {00134         AssignFromHelper(<span class="keyword">this</span>, source)00135                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a15">Modulus</a>)00136                 ;00137 }00138 00139 <span class="comment">// *****************************************************************************</span>00140 <span class="comment">// private key operations:</span>00141 00142 <span class="comment">// generate a random private key</span>00143 <span class="keyword">template</span> &lt;word r&gt;<a name="l00144"></a><a class="code" href="class_invertible_r_w_function.html#_invertible_r_w_functiona8">00144</a> <span class="keywordtype">void</span> <a class="code" href="class_invertible_r_w_function.html#_invertible_r_w_functiona8">InvertibleRWFunction&lt;r&gt;::GenerateRandom</a>(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;alg)00145 {00146         <span class="keywordtype">int</span> modulusSize = 2048;00147         alg.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha42">GetIntValue</a>(<span class="stringliteral">"ModulusSize"</span>, modulusSize) || alg.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha42">GetIntValue</a>(<span class="stringliteral">"KeySize"</span>, modulusSize);00148 00149         <span class="keywordflow">if</span> (modulusSize &lt; 16)00150                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"InvertibleRWFunction: specified modulus length is too small"</span>);00151 00152         <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;primeParam = MakeParametersForTwoPrimesOfEqualSize(modulusSize);00153         m_p.<a class="code" href="class_integer.html#_integerz43_14">GenerateRandom</a>(rng, CombinedNameValuePairs(primeParam, MakeParameters(<span class="stringliteral">"EquivalentTo"</span>, 3)(<span class="stringliteral">"Mod"</span>, 8)));00154         m_q.<a class="code" href="class_integer.html#_integerz43_14">GenerateRandom</a>(rng, CombinedNameValuePairs(primeParam, MakeParameters(<span class="stringliteral">"EquivalentTo"</span>, 7)(<span class="stringliteral">"Mod"</span>, 8)));00155 00156         m_n = m_p * m_q;00157         m_u = m_q.<a class="code" href="class_integer.html#_integerz49_7">InverseMod</a>(m_p);00158 }00159 00160 <span class="keyword">template</span> &lt;word r&gt;00161 <span class="keywordtype">void</span> <a class="code" href="class_invertible_r_w_function.html">InvertibleRWFunction&lt;r&gt;::BERDecode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)00162 {00163         <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> seq(bt);00164         m_n.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00165         m_p.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00166         m_q.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00167         m_u.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00168         seq.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00169 }00170 00171 <span class="keyword">template</span> &lt;word r&gt;00172 <span class="keywordtype">void</span> <a class="code" href="class_invertible_r_w_function.html">InvertibleRWFunction&lt;r&gt;::DEREncode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00173 <span class="keyword"></span>{00174         <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> seq(bt);00175         m_n.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00176         m_p.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00177         m_q.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00178         m_u.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00179         seq.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00180 }00181 00182 <span class="keyword">template</span> &lt;word r&gt;00183 <a class="code" href="class_integer.html">Integer</a> <a class="code" href="class_invertible_r_w_function.html">InvertibleRWFunction&lt;r&gt;::CalculateInverse</a>(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;in)<span class="keyword"> const</span>00184 <span class="keyword"></span>{00185         DoQuickSanityCheck();00186 00187         <a class="code" href="class_integer.html">Integer</a> cp=in%m_p, cq=in%m_q;00188 00189         <span class="keywordflow">if</span> (Jacobi(cp, m_p) * Jacobi(cq, m_q) != 1)00190         {00191                 cp = cp%2 ? (cp+m_p) &gt;&gt; 1 : cp &gt;&gt; 1;00192                 cq = cq%2 ? (cq+m_q) &gt;&gt; 1 : cq &gt;&gt; 1;00193         }00194 00195         cp = ModularSquareRoot(cp, m_p);00196         cq = ModularSquareRoot(cq, m_q);00197 00198         <a class="code" href="class_integer.html">Integer</a> out = CRT(cq, m_q, cp, m_p, m_u);00199 00200         <span class="keywordflow">return</span> STDMIN(out, m_n-out);00201 }00202 00203 <span class="keyword">template</span> &lt;word r&gt;<a name="l00204"></a><a class="code" href="class_invertible_r_w_function.html#_invertible_r_w_functiona5">00204</a> <span class="keywordtype">bool</span> <a class="code" href="class_invertible_r_w_function.html#_invertible_r_w_functiona5">InvertibleRWFunction&lt;r&gt;::Validate</a>(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level)<span class="keyword"> const</span>00205 <span class="keyword"></span>{00206         <span class="keywordtype">bool</span> pass = <a class="code" href="class_r_w_function.html#_r_w_functiona6">RWFunction&lt;r&gt;::Validate</a>(rng, level);00207         pass = pass &amp;&amp; m_p &gt; <a class="code" href="class_integer.html#_integerz37_11">Integer::One</a>() &amp;&amp; m_p%8 == 3 &amp;&amp; m_p &lt; m_n;00208         pass = pass &amp;&amp; m_q &gt; <a class="code" href="class_integer.html#_integerz37_11">Integer::One</a>() &amp;&amp; m_q%8 == 7 &amp;&amp; m_q &lt; m_n;00209         pass = pass &amp;&amp; m_u.<a class="code" href="class_integer.html#_integerz41_12">IsPositive</a>() &amp;&amp; m_u &lt; m_p;00210         <span class="keywordflow">if</span> (level &gt;= 1)00211         {00212                 pass = pass &amp;&amp; m_p * m_q == m_n;00213                 pass = pass &amp;&amp; m_u * m_q % m_p == 1;00214         }00215         <span class="keywordflow">if</span> (level &gt;= 2)00216                 pass = pass &amp;&amp; VerifyPrime(rng, m_p, level-2) &amp;&amp; VerifyPrime(rng, m_q, level-2);00217         <span class="keywordflow">return</span> pass;00218 }00219 00220 <span class="keyword">template</span> &lt;word r&gt;<a name="l00221"></a><a class="code" href="class_invertible_r_w_function.html#_invertible_r_w_functiona6">00221</a> <span class="keywordtype">bool</span> <a class="code" href="class_invertible_r_w_function.html#_invertible_r_w_functiona6">InvertibleRWFunction&lt;r&gt;::GetVoidValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &amp;valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const</span>00222 <span class="keyword"></span>{00223         <span class="keywordflow">return</span> GetValueHelper&lt;RWFunction&lt;r&gt; &gt;(<span class="keyword">this</span>, name, valueType, pValue).Assignable()00224                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a24">Prime1</a>)00225                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a25">Prime2</a>)00226                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a28">MultiplicativeInverseOfPrime2ModPrime1</a>)00227                 ;00228 }00229 00230 <span class="keyword">template</span> &lt;word r&gt;<a name="l00231"></a><a class="code" href="class_invertible_r_w_function.html#_invertible_r_w_functiona7">00231</a> <span class="keywordtype">void</span> <a class="code" href="class_invertible_r_w_function.html#_invertible_r_w_functiona7">InvertibleRWFunction&lt;r&gt;::AssignFrom</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source)00232 {00233         AssignFromHelper&lt;RWFunction&lt;r&gt; &gt;(<span class="keyword">this</span>, source)00234                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a24">Prime1</a>)00235                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a25">Prime2</a>)00236                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a28">MultiplicativeInverseOfPrime2ModPrime1</a>)00237                 ;00238 }00239 00240 <span class="keyword">template</span> <span class="keyword">class </span><a class="code" href="class_r_w_function.html">RWFunction&lt;IFSSA_R&gt;</a>;00241 <span class="keyword">template</span> <span class="keyword">class </span><a class="code" href="class_invertible_r_w_function.html">InvertibleRWFunction&lt;IFSSA_R&gt;</a>;00242 00243 NAMESPACE_END</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:24 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 + -