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

📄 luc_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00106 };00107 <a name="l00108"></a><a class="code" href="class_invertible_l_u_c_function.html#_invertible_l_u_c_functiona8">00108</a> <span class="keywordtype">void</span> <a class="code" href="class_invertible_l_u_c_function.html#_invertible_l_u_c_functiona8">InvertibleLUCFunction::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)00109 {00110         <span class="keywordtype">int</span> modulusSize = 2048;00111         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);00112 00113         <span class="keywordflow">if</span> (modulusSize &lt; 16)00114                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"InvertibleLUCFunction: specified modulus size is too small"</span>);00115 00116         m_e = alg.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="stringliteral">"PublicExponent"</span>, <a class="code" href="class_integer.html">Integer</a>(17));00117 00118         <span class="keywordflow">if</span> (m_e &lt; 5 || m_e.<a class="code" href="class_integer.html#_integerz41_14">IsEven</a>())00119                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"InvertibleLUCFunction: invalid public exponent"</span>);00120 00121         LUCPrimeSelector selector(m_e);00122         <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;primeParam = MakeParametersForTwoPrimesOfEqualSize(modulusSize)00123                 (<span class="stringliteral">"PointerToPrimeSelector"</span>, selector.GetSelectorPointer());00124         m_p.<a class="code" href="class_integer.html#_integerz43_14">GenerateRandom</a>(rng, primeParam);00125         m_q.<a class="code" href="class_integer.html#_integerz43_14">GenerateRandom</a>(rng, primeParam);00126 00127         m_n = m_p * m_q;00128         m_u = m_q.<a class="code" href="class_integer.html#_integerz49_7">InverseMod</a>(m_p);00129 }00130 00131 <span class="keywordtype">void</span> InvertibleLUCFunction::Initialize(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> keybits, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e)00132 {00133         <a class="code" href="class_invertible_l_u_c_function.html#_invertible_l_u_c_functiona8">GenerateRandom</a>(rng, MakeParameters(<span class="stringliteral">"ModulusSize"</span>, (<span class="keywordtype">int</span>)keybits)(<span class="stringliteral">"PublicExponent"</span>, e));00134 }00135 00136 <span class="keywordtype">void</span> InvertibleLUCFunction::BERDecode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)00137 {00138         <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> seq(bt);00139 00140         <a class="code" href="class_integer.html">Integer</a> version(seq);00141         <span class="keywordflow">if</span> (!!version)  <span class="comment">// make sure version is 0</span>00142                 BERDecodeError();00143 00144         m_n.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00145         m_e.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00146         m_p.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00147         m_q.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00148         m_u.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00149         seq.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00150 }00151 00152 <span class="keywordtype">void</span> InvertibleLUCFunction::DEREncode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00153 <span class="keyword"></span>{00154         <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> seq(bt);00155 00156         <span class="keyword">const</span> byte version[] = {INTEGER, 1, 0};00157         seq.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(version, <span class="keyword">sizeof</span>(version));00158         m_n.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00159         m_e.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00160         m_p.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00161         m_q.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00162         m_u.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00163         seq.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00164 }00165 00166 <a class="code" href="class_integer.html">Integer</a> InvertibleLUCFunction::CalculateInverse(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;x)<span class="keyword"> const</span>00167 <span class="keyword"></span>{00168         DoQuickSanityCheck();00169         <span class="keywordflow">return</span> InverseLucas(m_e, x, m_q, m_p, m_u);00170 }00171 <a name="l00172"></a><a class="code" href="class_invertible_l_u_c_function.html#_invertible_l_u_c_functiona5">00172</a> <span class="keywordtype">bool</span> <a class="code" href="class_invertible_l_u_c_function.html#_invertible_l_u_c_functiona5">InvertibleLUCFunction::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>00173 <span class="keyword"></span>{00174         <span class="keywordtype">bool</span> pass = <a class="code" href="class_l_u_c_function.html#_l_u_c_functiona6">LUCFunction::Validate</a>(rng, level);00175         pass = pass &amp;&amp; m_p &gt; <a class="code" href="class_integer.html#_integerz37_11">Integer::One</a>() &amp;&amp; m_p.<a class="code" href="class_integer.html#_integerz41_15">IsOdd</a>() &amp;&amp; m_p &lt; m_n;00176         pass = pass &amp;&amp; m_q &gt; <a class="code" href="class_integer.html#_integerz37_11">Integer::One</a>() &amp;&amp; m_q.<a class="code" href="class_integer.html#_integerz41_15">IsOdd</a>() &amp;&amp; m_q &lt; m_n;00177         pass = pass &amp;&amp; m_u.<a class="code" href="class_integer.html#_integerz41_12">IsPositive</a>() &amp;&amp; m_u &lt; m_p;00178         <span class="keywordflow">if</span> (level &gt;= 1)00179         {00180                 pass = pass &amp;&amp; m_p * m_q == m_n;00181                 pass = pass &amp;&amp; RelativelyPrime(m_e, m_p+1);00182                 pass = pass &amp;&amp; RelativelyPrime(m_e, m_p-1);00183                 pass = pass &amp;&amp; RelativelyPrime(m_e, m_q+1);00184                 pass = pass &amp;&amp; RelativelyPrime(m_e, m_q-1);00185                 pass = pass &amp;&amp; m_u * m_q % m_p == 1;00186         }00187         <span class="keywordflow">if</span> (level &gt;= 2)00188                 pass = pass &amp;&amp; VerifyPrime(rng, m_p, level-2) &amp;&amp; VerifyPrime(rng, m_q, level-2);00189         <span class="keywordflow">return</span> pass;00190 }00191 <a name="l00192"></a><a class="code" href="class_invertible_l_u_c_function.html#_invertible_l_u_c_functiona6">00192</a> <span class="keywordtype">bool</span> <a class="code" href="class_invertible_l_u_c_function.html#_invertible_l_u_c_functiona6">InvertibleLUCFunction::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>00193 <span class="keyword"></span>{00194         <span class="keywordflow">return</span> GetValueHelper&lt;LUCFunction&gt;(<span class="keyword">this</span>, name, valueType, pValue).Assignable()00195                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a24">Prime1</a>)00196                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a25">Prime2</a>)00197                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a28">MultiplicativeInverseOfPrime2ModPrime1</a>)00198                 ;00199 }00200 <a name="l00201"></a><a class="code" href="class_invertible_l_u_c_function.html#_invertible_l_u_c_functiona7">00201</a> <span class="keywordtype">void</span> <a class="code" href="class_invertible_l_u_c_function.html#_invertible_l_u_c_functiona7">InvertibleLUCFunction::AssignFrom</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source)00202 {00203         AssignFromHelper&lt;LUCFunction&gt;(<span class="keyword">this</span>, source)00204                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a24">Prime1</a>)00205                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a25">Prime2</a>)00206                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a28">MultiplicativeInverseOfPrime2ModPrime1</a>)00207                 ;00208 }00209 00210 NAMESPACE_END</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:19 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 + -