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

📄 mqv_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00072                 params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa19">EncodeElement</a>(<span class="keyword">true</span>, y, privateKey+<a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina10">StaticPrivateKeyLength</a>());00073         }00074 <a name="l00075"></a><a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina17">00075</a>         <span class="keywordtype">void</span> <a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina17">GenerateEphemeralPublicKey</a>(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> byte *privateKey, byte *publicKey)<span class="keyword"> const</span>00076 <span class="keyword">        </span>{00077                 memcpy(publicKey, privateKey+<a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina10">StaticPrivateKeyLength</a>(), <a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina15">EphemeralPublicKeyLength</a>());00078         }00079 <a name="l00080"></a><a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina18">00080</a>         <span class="keywordtype">bool</span> <a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina18">Agree</a>(byte *agreedValue,00081                 <span class="keyword">const</span> byte *staticPrivateKey, <span class="keyword">const</span> byte *ephemeralPrivateKey, 00082                 <span class="keyword">const</span> byte *staticOtherPublicKey, <span class="keyword">const</span> byte *ephemeralOtherPublicKey,00083                 <span class="keywordtype">bool</span> validateStaticOtherPublicKey=<span class="keyword">true</span>)<span class="keyword"> const</span>00084 <span class="keyword">        </span>{00085                 <span class="keywordflow">try</span>00086                 {00087                         <span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html">DL_GroupParameters&lt;Element&gt;</a> &amp;params = GetAbstractGroupParameters();00088                         Element WW = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa20">DecodeElement</a>(staticOtherPublicKey, validateStaticOtherPublicKey);00089                         Element VV = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa20">DecodeElement</a>(ephemeralOtherPublicKey, <span class="keyword">true</span>);00090 00091                         <a class="code" href="class_integer.html">Integer</a> s(staticPrivateKey, <a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina10">StaticPrivateKeyLength</a>());00092                         <a class="code" href="class_integer.html">Integer</a> u(ephemeralPrivateKey, <a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina10">StaticPrivateKeyLength</a>());00093                         Element V = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa20">DecodeElement</a>(ephemeralPrivateKey+<a class="code" href="class_m_q_v___domain.html#_m_q_v___domaina10">StaticPrivateKeyLength</a>(), <span class="keyword">false</span>);00094 00095                         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;r = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa14">GetSubgroupOrder</a>();00096                         <a class="code" href="class_integer.html">Integer</a> h2 = <a class="code" href="class_integer.html#_integerz37_13">Integer::Power2</a>((r.<a class="code" href="class_integer.html#_integerz41_2">BitCount</a>()+1)/2);00097                         <a class="code" href="class_integer.html">Integer</a> e = ((h2+params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa21">ConvertElementToInteger</a>(V)%h2)*s+u) % r;00098                         <a class="code" href="class_integer.html">Integer</a> tt = h2 + params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa21">ConvertElementToInteger</a>(VV) % h2;00099 00100                         <span class="keywordflow">if</span> (COFACTOR_OPTION::ToEnum() == NO_COFACTOR_MULTIPLICTION)00101                         {00102                                 Element P = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa10">ExponentiateElement</a>(WW, tt);00103                                 P = m_groupParameters.MultiplyElements(P, VV);00104                                 Element R[2];00105                                 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> e2[2] = {r, e};00106                                 params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa26">SimultaneousExponentiate</a>(R, P, e2, 2);00107                                 <span class="keywordflow">if</span> (!params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa25">IsIdentity</a>(R[0]) || params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa25">IsIdentity</a>(R[1]))00108                                         <span class="keywordflow">return</span> <span class="keyword">false</span>;00109                                 params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa19">EncodeElement</a>(<span class="keyword">false</span>, R[1], agreedValue);00110                         }00111                         <span class="keywordflow">else</span>00112                         {00113                                 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;k = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa17">GetCofactor</a>();00114                                 <span class="keywordflow">if</span> (COFACTOR_OPTION::ToEnum() == COMPATIBLE_COFACTOR_MULTIPLICTION)00115                                         e = <a class="code" href="class_modular_arithmetic.html">ModularArithmetic</a>(r).Divide(e, k);00116                                 Element P = m_groupParameters.CascadeExponentiate(VV, k*e, WW, k*(e*tt%r));00117                                 <span class="keywordflow">if</span> (params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa25">IsIdentity</a>(P))00118                                         <span class="keywordflow">return</span> <span class="keyword">false</span>;00119                                 params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa19">EncodeElement</a>(<span class="keyword">false</span>, P, agreedValue);00120                         }00121                 }00122                 <span class="keywordflow">catch</span> (DL_BadElement &amp;)00123                 {00124                         <span class="keywordflow">return</span> <span class="keyword">false</span>;00125                 }00126                 <span class="keywordflow">return</span> <span class="keyword">true</span>;00127         }00128 00129 <span class="keyword">private</span>:00130         <a class="code" href="class_d_l___group_parameters.html">DL_GroupParameters&lt;Element&gt;</a> &amp; AccessAbstractGroupParameters() {<span class="keywordflow">return</span> m_groupParameters;}00131         <span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html">DL_GroupParameters&lt;Element&gt;</a> &amp; GetAbstractGroupParameters()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_groupParameters;}00132 00133         GroupParameters m_groupParameters;00134 };00135 <span class="comment"></span>00136 <span class="comment">//! Menezes-Qu-Vanstone in GF(p) with key validation, AKA &lt;a href="http://www.weidai.com/scan-mirror/ka.html#MQV"&gt;MQV&lt;/a&gt;</span><a name="l00137"></a><a class="code" href="mqv_8h.html#a0">00137</a> <span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="class_m_q_v___domain.html">MQV_Domain&lt;DL_GroupParameters_GFP_DefaultSafePrime&gt;</a> <a class="code" href="class_m_q_v___domain.html">MQV</a>;00138 00139 NAMESPACE_END00140 00141 <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 + -