gfpcrypt_8h-source.html

来自「Crypto++是一个非常强大的密码学库,主要是功能全」· HTML 代码 · 共 516 行 · 第 1/5 页

HTML
516
字号
00098         <span class="keyword">const</span> DL_FixedBasePrecomputation&lt;Element&gt; &amp; GetBasePrecomputation()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_gpc;}00099         DL_FixedBasePrecomputation&lt;Element&gt; &amp; AccessBasePrecomputation() {<span class="keywordflow">return</span> m_gpc;}00100 00101         <span class="comment">// IntegerGroupParameters</span>00102         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp; GetModulus()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_groupPrecomputation.GetModulus();}00103         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp; GetGenerator()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_gpc.GetBase(GetGroupPrecomputation());}00104 00105         <span class="keywordtype">void</span> SetModulusAndSubgroupGenerator(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;p, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;g)         <span class="comment">// these have to be set together</span>00106                 {m_groupPrecomputation.SetModulus(p); m_gpc.SetBase(GetGroupPrecomputation(), g); ParametersChanged();}00107 00108         <span class="comment">// non-inherited</span>00109         <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html">DL_GroupParameters_IntegerBasedImpl&lt;GROUP_PRECOMP, BASE_PRECOMP&gt;</a> &amp;rhs)<span class="keyword"> const</span>00110 <span class="keyword">                </span>{<span class="keywordflow">return</span> GetModulus() == rhs.<a class="code" href="class_d_l___group_parameters___integer_based_impl.html#_d_l___group_parameters___integer_based_impla4">GetModulus</a>() &amp;&amp; GetGenerator() == rhs.<a class="code" href="class_d_l___group_parameters___integer_based_impl.html#_d_l___group_parameters___integer_based_impla5">GetGenerator</a>() &amp;&amp; GetSubgroupOrder() == rhs.<a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a13">GetSubgroupOrder</a>();}00111         <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html">DL_GroupParameters_IntegerBasedImpl&lt;GROUP_PRECOMP, BASE_PRECOMP&gt;</a> &amp;rhs)<span class="keyword"> const</span>00112 <span class="keyword">                </span>{<span class="keywordflow">return</span> !operator==(rhs);}00113 };00114 00115 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_d_l___group_parameters___integer_based_impl.html">DL_GroupParameters_IntegerBasedImpl&lt;ModExpPrecomputation&gt;</a>;00116 <span class="comment"></span>00117 <span class="comment">//! .</span><a name="l00118"></a><a class="code" href="class_d_l___group_parameters___g_f_p.html">00118</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL DL_GroupParameters_GFP : <span class="keyword">public</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html">DL_GroupParameters_IntegerBasedImpl</a>&lt;ModExpPrecomputation&gt;00119 {00120 <span class="keyword">public</span>:00121         <span class="comment">// DL_GroupParameters</span>00122         <span class="keywordtype">bool</span> IsIdentity(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;element)<span class="keyword"> const </span>{<span class="keywordflow">return</span> element == <a class="code" href="class_integer.html#_integerz37_11">Integer::One</a>();}00123         <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">Integer</a> *exponents, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exponentsCount) <span class="keyword">const</span>;00124 00125         <span class="comment">// NameValuePairs interface</span><a name="l00126"></a><a class="code" href="class_d_l___group_parameters___g_f_p.html#_d_l___group_parameters___g_f_p___default_safe_primea3">00126</a>         <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html#_d_l___group_parameters___integer_based_impla0">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>00127 <span class="keyword">        </span>{00128                 <span class="keywordflow">return</span> GetValueHelper&lt;DL_GroupParameters_IntegerBased&gt;(<span class="keyword">this</span>, name, valueType, pValue).Assignable();00129         }00130 00131         <span class="comment">// used by MQV</span>00132         Element MultiplyElements(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b) <span class="keyword">const</span>;00133         Element CascadeExponentiate(<span class="keyword">const</span> Element &amp;element1, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;exponent1, <span class="keyword">const</span> Element &amp;element2, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;exponent2) <span class="keyword">const</span>;00134 00135 <span class="keyword">protected</span>:00136         <span class="keywordtype">int</span> GetFieldType()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 1;}00137 };00138 <span class="comment"></span>00139 <span class="comment">//! .</span><a name="l00140"></a><a class="code" href="class_d_l___group_parameters___g_f_p___default_safe_prime.html">00140</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL DL_GroupParameters_GFP_DefaultSafePrime : <span class="keyword">public</span> DL_GroupParameters_GFP00141 {00142 <span class="keyword">public</span>:00143         <span class="keyword">typedef</span> NoCofactorMultiplication DefaultCofactorOption;00144 00145 <span class="keyword">protected</span>:00146         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetDefaultSubgroupOrderSize(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modulusSize)<span class="keyword"> const </span>{<span class="keywordflow">return</span> modulusSize-1;}00147 };00148 <span class="comment"></span>00149 <span class="comment">//! .</span>00150 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;<a name="l00151"></a><a class="code" href="class_d_l___algorithm___g_d_s_a.html">00151</a> <span class="keyword">class </span><a class="code" href="class_d_l___algorithm___g_d_s_a.html">DL_Algorithm_GDSA</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___elgamal_like_signature_algorithm.html">DL_ElgamalLikeSignatureAlgorithm</a>&lt;T&gt;00152 {00153 <span class="keyword">public</span>:00154         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * StaticAlgorithmName() {<span class="keywordflow">return</span> <span class="stringliteral">"DSA-1363"</span>;}00155 00156         <a class="code" href="class_integer.html">Integer</a> EncodeDigest(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modulusBits, <span class="keyword">const</span> byte *digest, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> digestLen)<span class="keyword"> const</span>00157 <span class="keyword">        </span>{00158                 <span class="keywordflow">return</span> DSA_EncodeDigest(modulusBits, digest, digestLen);00159         }00160 00161         <span class="keywordtype">bool</span> Sign(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html">DL_GroupParameters&lt;T&gt;</a> &amp;params, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;x, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;k, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e, <a class="code" href="class_integer.html">Integer</a> &amp;r, <a class="code" href="class_integer.html">Integer</a> &amp;s)<span class="keyword"> const</span>00162 <span class="keyword">        </span>{00163                 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;q = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa14">GetSubgroupOrder</a>();00164                 r = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa21">ConvertElementToInteger</a>(params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa9">ExponentiateBase</a>(k)) % q;00165                 <a class="code" href="class_integer.html">Integer</a> kInv = k.<a class="code" href="class_integer.html#_integerz49_7">InverseMod</a>(q);00166                 s = (kInv * (x*r + e)) % q;00167                 <span class="keywordflow">return</span> (!!r &amp;&amp; !!s);00168         }00169 00170         <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html">DL_GroupParameters&lt;T&gt;</a> &amp;params, <span class="keyword">const</span> <a class="code" href="class_d_l___public_key.html">DL_PublicKey&lt;T&gt;</a> &amp;publicKey, <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;r, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;s)<span class="keyword"> const</span>00171 <span class="keyword">        </span>{00172                 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;q = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa14">GetSubgroupOrder</a>();00173                 <span class="keywordflow">if</span> (r&gt;=q || r&lt;1 || s&gt;=q || s&lt;1)00174                         <span class="keywordflow">return</span> <span class="keyword">false</span>;00175 00176                 <a class="code" href="class_integer.html">Integer</a> w = s.<a class="code" href="class_integer.html#_integerz49_7">InverseMod</a>(q);00177                 <a class="code" href="class_integer.html">Integer</a> u1 = (e * w) % q;00178                 <a class="code" href="class_integer.html">Integer</a> u2 = (r * w) % q;00179                 <span class="comment">// verify r == (g^u1 * y^u2 mod p) mod q</span>00180                 <span class="keywordflow">return</span> r == params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa21">ConvertElementToInteger</a>(publicKey.<a class="code" href="class_d_l___public_key.html#_d_l___public_keya5">CascadeExponentiateBaseAndPublicElement</a>(u1, u2)) % q;00181         }00182 };00183 00184 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_d_l___algorithm___g_d_s_a.html">DL_Algorithm_GDSA&lt;Integer&gt;</a>;00185 <span class="comment"></span>00186 <span class="comment">//! .</span>00187 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;<a name="l00188"></a><a class="code" href="class_d_l___algorithm___n_r.html">00188</a> <span class="keyword">class </span><a class="code" href="class_d_l___algorithm___n_r.html">DL_Algorithm_NR</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___elgamal_like_signature_algorithm.html">DL_ElgamalLikeSignatureAlgorithm</a>&lt;T&gt;00189 {00190 <span class="keyword">public</span>:00191         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * StaticAlgorithmName() {<span class="keywordflow">return</span> <span class="stringliteral">"NR"</span>;}00192 00193         <a class="code" href="class_integer.html">Integer</a> EncodeDigest(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modulusBits, <span class="keyword">const</span> byte *digest, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> digestLen)<span class="keyword"> const</span>00194 <span class="keyword">        </span>{00195                 <span class="keywordflow">return</span> NR_EncodeDigest(modulusBits, digest, digestLen);00196         }00197 00198         <span class="keywordtype">bool</span> Sign(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html">DL_GroupParameters&lt;T&gt;</a> &amp;params, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;x, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;k, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e, <a class="code" href="class_integer.html">Integer</a> &amp;r, <a class="code" href="class_integer.html">Integer</a> &amp;s)<span class="keyword"> const</span>00199 <span class="keyword">        </span>{00200                 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;q = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa14">GetSubgroupOrder</a>();00201                 r = (params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa21">ConvertElementToInteger</a>(params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa9">ExponentiateBase</a>(k)) + e) % q;

⌨️ 快捷键说明

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