gfpcrypt_8h-source.html
来自「Crypto++是一个非常强大的密码学库,主要是功能全」· HTML 代码 · 共 516 行 · 第 1/5 页
HTML
516 行
00098 <span class="keyword">const</span> DL_FixedBasePrecomputation<Element> & GetBasePrecomputation()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_gpc;}00099 DL_FixedBasePrecomputation<Element> & 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> & 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> & 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> &p, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &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<GROUP_PRECOMP, BASE_PRECOMP></a> &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>() && GetGenerator() == rhs.<a class="code" href="class_d_l___group_parameters___integer_based_impl.html#_d_l___group_parameters___integer_based_impla5">GetGenerator</a>() && 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<GROUP_PRECOMP, BASE_PRECOMP></a> &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<ModExpPrecomputation></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><ModExpPrecomputation>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> &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 &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 &valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const</span>00127 <span class="keyword"> </span>{00128 <span class="keywordflow">return</span> GetValueHelper<DL_GroupParameters_IntegerBased>(<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 &a, <span class="keyword">const</span> Element &b) <span class="keyword">const</span>;00133 Element CascadeExponentiate(<span class="keyword">const</span> Element &element1, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &exponent1, <span class="keyword">const</span> Element &element2, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &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> <<span class="keyword">class</span> T><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><T>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<T></a> &params, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &x, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &k, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &e, <a class="code" href="class_integer.html">Integer</a> &r, <a class="code" href="class_integer.html">Integer</a> &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> &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 && !!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<T></a> &params, <span class="keyword">const</span> <a class="code" href="class_d_l___public_key.html">DL_PublicKey<T></a> &publicKey, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &e, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &r, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &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> &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>=q || r<1 || s>=q || s<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<Integer></a>;00185 <span class="comment"></span>00186 <span class="comment">//! .</span>00187 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> T><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><T>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<T></a> &params, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &x, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &k, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &e, <a class="code" href="class_integer.html">Integer</a> &r, <a class="code" href="class_integer.html">Integer</a> &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> &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 + -
显示快捷键?