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

📄 gfpcrypt_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00122"></a>00122         <span class="comment">// DL_GroupParameters</span><a name="l00123"></a><a class="code" href="class_d_l___group_parameters___g_f_p.html#6bb3dbd327a516a47aa2407cbce10d55">00123</a>         <span class="keywordtype">bool</span> IsIdentity(<span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;element)<span class="keyword"> const </span>{<span class="keywordflow">return</span> element == <a class="code" href="class_integer.html#8c070592581bf6c2f928c72bfa1c1638" title="avoid calling constructors for these frequently used integers">Integer::One</a>();}<a name="l00124"></a>00124         <span class="keywordtype">void</span> SimultaneousExponentiate(Element *results, <span class="keyword">const</span> Element &amp;base, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> *exponents, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exponentsCount) <span class="keyword">const</span>;<a name="l00125"></a>00125 <a name="l00126"></a>00126         <span class="comment">// NameValuePairs interface</span><a name="l00127"></a><a class="code" href="class_d_l___group_parameters___g_f_p.html#02a6a339e6fb0458ef4cea824dfa965d">00127</a>         <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html#a017775352184937c5f064a4776d587e" title="to be implemented by derived classes, users should use one of the above functions...">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><a name="l00128"></a>00128 <span class="keyword">        </span>{<a name="l00129"></a>00129                 <span class="keywordflow">return</span> GetValueHelper&lt;DL_GroupParameters_IntegerBased&gt;(<span class="keyword">this</span>, name, valueType, pValue).Assignable();<a name="l00130"></a>00130         }<a name="l00131"></a>00131 <a name="l00132"></a>00132         <span class="comment">// used by MQV</span><a name="l00133"></a>00133         Element MultiplyElements(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b) <span class="keyword">const</span>;<a name="l00134"></a>00134         Element CascadeExponentiate(<span class="keyword">const</span> Element &amp;element1, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;exponent1, <span class="keyword">const</span> Element &amp;element2, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;exponent2) <span class="keyword">const</span>;<a name="l00135"></a>00135 <a name="l00136"></a>00136 <span class="keyword">protected</span>:<a name="l00137"></a><a class="code" href="class_d_l___group_parameters___g_f_p.html#aa7bb277d7446553ad243eec87da6efc">00137</a>         <span class="keywordtype">int</span> GetFieldType()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 1;}<a name="l00138"></a>00138 };<a name="l00139"></a>00139 <span class="comment"></span><a name="l00140"></a>00140 <span class="comment">//! GF(p) group parameters that default to same primes</span><a name="l00141"></a><a class="code" href="class_d_l___group_parameters___g_f_p___default_safe_prime.html">00141</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL DL_GroupParameters_GFP_DefaultSafePrime : <span class="keyword">public</span> <a class="code" href="class_d_l___group_parameters___g_f_p.html" title="GF(p) group parameters.">DL_GroupParameters_GFP</a><a name="l00142"></a>00142 {<a name="l00143"></a>00143 <span class="keyword">public</span>:<a name="l00144"></a><a class="code" href="class_d_l___group_parameters___g_f_p___default_safe_prime.html#293711b516f4d541ae51ba701b26fb34">00144</a>         <span class="keyword">typedef</span> <a class="code" href="struct_enum_to_type.html">NoCofactorMultiplication</a> <a class="code" href="struct_enum_to_type.html">DefaultCofactorOption</a>;<a name="l00145"></a>00145 <a name="l00146"></a>00146 <span class="keyword">protected</span>:<a name="l00147"></a><a class="code" href="class_d_l___group_parameters___g_f_p___default_safe_prime.html#dec422717a7665d12b9a351727147ebe">00147</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_d_l___group_parameters___integer_based.html#91dcd7ec2cad65152b863522144351bd">GetDefaultSubgroupOrderSize</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modulusSize)<span class="keyword"> const </span>{<span class="keywordflow">return</span> modulusSize-1;}<a name="l00148"></a>00148 };<a name="l00149"></a>00149 <span class="comment"></span><a name="l00150"></a>00150 <span class="comment">//! GDSA algorithm</span><a name="l00151"></a>00151 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;<a name="l00152"></a><a class="code" href="class_d_l___algorithm___g_d_s_a.html">00152</a> <span class="keyword">class </span><a class="code" href="class_d_l___algorithm___g_d_s_a.html" title="GDSA algorithm.">DL_Algorithm_GDSA</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___elgamal_like_signature_algorithm.html" title="interface for Elgamal-like signature algorithms">DL_ElgamalLikeSignatureAlgorithm</a>&lt;T&gt;<a name="l00153"></a>00153 {<a name="l00154"></a>00154 <span class="keyword">public</span>:<a name="l00155"></a><a class="code" href="class_d_l___algorithm___g_d_s_a.html#4e705e6b3b600407f49131294abe08f0">00155</a>         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * CRYPTOPP_API <a class="code" href="class_d_l___algorithm___g_d_s_a.html#4e705e6b3b600407f49131294abe08f0">StaticAlgorithmName</a>() {<span class="keywordflow">return</span> <span class="stringliteral">"DSA-1363"</span>;}<a name="l00156"></a>00156 <a name="l00157"></a><a class="code" href="class_d_l___algorithm___g_d_s_a.html#8a60aa64a15eced1c26686f8eac089d9">00157</a>         <span class="keywordtype">void</span> <a class="code" href="class_d_l___algorithm___g_d_s_a.html#8a60aa64a15eced1c26686f8eac089d9">Sign</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html" title="interface for DL group parameters">DL_GroupParameters&lt;T&gt;</a> &amp;params, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;x, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;k, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;e, <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;r, <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;s)<span class="keyword"> const</span><a name="l00158"></a>00158 <span class="keyword">        </span>{<a name="l00159"></a>00159                 <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;q = params.<a class="code" href="class_d_l___group_parameters.html#3555cec872358c0f314a375f56119c99">GetSubgroupOrder</a>();<a name="l00160"></a>00160                 r %= q;<a name="l00161"></a>00161                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> kInv = k.<a class="code" href="class_integer.html#881f9c714ee42f35718725a43d4d7db3" title="calculate multiplicative inverse of *this mod n">InverseMod</a>(q);<a name="l00162"></a>00162                 s = (kInv * (x*r + e)) % q;<a name="l00163"></a>00163                 assert(!!r &amp;&amp; !!s);<a name="l00164"></a>00164         }<a name="l00165"></a>00165 <a name="l00166"></a><a class="code" href="class_d_l___algorithm___g_d_s_a.html#a88f8827bab1adc8d61a2ba4f87941e7">00166</a>         <span class="keywordtype">bool</span> <a class="code" href="class_d_l___algorithm___g_d_s_a.html#a88f8827bab1adc8d61a2ba4f87941e7">Verify</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html" title="interface for DL group parameters">DL_GroupParameters&lt;T&gt;</a> &amp;params, <span class="keyword">const</span> <a class="code" href="class_d_l___public_key.html" title="interface for DL public keys">DL_PublicKey&lt;T&gt;</a> &amp;publicKey, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;e, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;r, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;s)<span class="keyword"> const</span><a name="l00167"></a>00167 <span class="keyword">        </span>{<a name="l00168"></a>00168                 <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;q = params.<a class="code" href="class_d_l___group_parameters.html#3555cec872358c0f314a375f56119c99">GetSubgroupOrder</a>();<a name="l00169"></a>00169                 <span class="keywordflow">if</span> (r&gt;=q || r&lt;1 || s&gt;=q || s&lt;1)<a name="l00170"></a>00170                         <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00171"></a>00171 <a name="l00172"></a>00172                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> w = s.<a class="code" href="class_integer.html#881f9c714ee42f35718725a43d4d7db3" title="calculate multiplicative inverse of *this mod n">InverseMod</a>(q);<a name="l00173"></a>00173                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> u1 = (e * w) % q;<a name="l00174"></a>00174                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> u2 = (r * w) % q;<a name="l00175"></a>00175                 <span class="comment">// verify r == (g^u1 * y^u2 mod p) mod q</span><a name="l00176"></a>00176                 <span class="keywordflow">return</span> r == params.<a class="code" href="class_d_l___group_parameters.html#fb36d983bb45fe3b8acb1767c0060700">ConvertElementToInteger</a>(publicKey.<a class="code" href="class_d_l___public_key.html#63d54207437aeb69fcccdd1fbbde12e8">CascadeExponentiateBaseAndPublicElement</a>(u1, u2)) % q;<a name="l00177"></a>00177         }<a name="l00178"></a>00178 };<a name="l00179"></a>00179 <a name="l00180"></a>00180 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_d_l___algorithm___g_d_s_a.html" title="GDSA algorithm.">DL_Algorithm_GDSA&lt;Integer&gt;</a>;<a name="l00181"></a>00181 <span class="comment"></span><a name="l00182"></a>00182 <span class="comment">//! NR algorithm</span><a name="l00183"></a>00183 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;<a name="l00184"></a><a class="code" href="class_d_l___algorithm___n_r.html">00184</a> <span class="keyword">class </span><a class="code" href="class_d_l___algorithm___n_r.html" title="NR algorithm.">DL_Algorithm_NR</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___elgamal_like_signature_algorithm.html" title="interface for Elgamal-like signature algorithms">DL_ElgamalLikeSignatureAlgorithm</a>&lt;T&gt;<a name="l00185"></a>00185 {<a name="l00186"></a>00186 <span class="keyword">public</span>:<a name="l00187"></a><a class="code" href="class_d_l___algorithm___n_r.html#0479a4788e3805606b34eaa426567ada">00187</a>         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * CRYPTOPP_API <a class="code" href="class_d_l___algorithm___n_r.html#0479a4788e3805606b34eaa426567ada">StaticAlgorithmName</a>() {<span class="keywordflow">return</span> <span class="stringliteral">"NR"</span>;}<a name="l00188"></a>00188 <a name="l00189"></a><a class="code" href="class_d_l___algorithm___n_r.html#1bec206f59857977ceca6fd1c94130b9">00189</a>         <span class="keywordtype">void</span> <a class="code" href="class_d_l___algorithm___n_r.html#1bec206f59857977ceca6fd1c94130b9">Sign</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html" title="interface for DL group parameters">DL_GroupParameters&lt;T&gt;</a> &amp;params, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;x, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;k, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;e, <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;r, <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;s)<span class="keyword"> const</span><a name="l00190"></a>00190 <span class="keyword">        </span>{<a name="l00191"></a>00191                 <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;q = params.<a class="code" href="class_d_l___group_parameters.html#3555cec872358c0f314a375f56119c99">GetSubgroupOrder</a>();<a name="l00192"></a>00192                 r = (r + e) % q;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -