gfpcrypt_8h-source.html
来自「Crypto++是一个非常强大的密码学库,主要是功能全」· HTML 代码 · 共 516 行 · 第 1/5 页
HTML
516 行
00202 s = (k - x*r) % q;00203 <span class="keywordflow">return</span> !!r;00204 }00205 00206 <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>00207 <span class="keyword"> </span>{00208 <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>();00209 <span class="keywordflow">if</span> (r>=q || r<1 || s>=q)00210 <span class="keywordflow">return</span> <span class="keyword">false</span>;00211 00212 <span class="comment">// check r == (m_g^s * m_y^r + m) mod m_q</span>00213 <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>(s, r)) + e) % q;00214 }00215 };00216 <span class="comment"></span>00217 <span class="comment">/*! DSA public key format is defined in 7.3.3 of RFC 2459. The</span>00218 <span class="comment"> private key format is defined in 12.9 of PKCS #11 v2.10. */</span>00219 <span class="keyword">template</span> <<span class="keyword">class</span> GP><a name="l00220"></a><a class="code" href="class_d_l___public_key___g_f_p.html">00220</a> <span class="keyword">class </span><a class="code" href="class_d_l___public_key___g_f_p.html">DL_PublicKey_GFP</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___public_key_impl.html">DL_PublicKeyImpl</a><GP>00221 {00222 <span class="keyword">public</span>:00223 <span class="keywordtype">void</span> Initialize(<span class="keyword">const</span> DL_GroupParameters_IntegerBased &params, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &y)00224 {AccessGroupParameters().Initialize(params); SetPublicElement(y);}00225 <span class="keywordtype">void</span> Initialize(<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="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &y)00226 {AccessGroupParameters().Initialize(p, g); SetPublicElement(y);}00227 <span class="keywordtype">void</span> Initialize(<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> &q, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &g, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &y)00228 {AccessGroupParameters().Initialize(p, q, g); SetPublicElement(y);}00229 00230 <span class="comment">// X509PublicKey</span>00231 <span class="keywordtype">void</span> BERDecodeKey(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)00232 {SetPublicElement(<a class="code" href="class_integer.html">Integer</a>(bt));}00233 <span class="keywordtype">void</span> DEREncodeKey(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)<span class="keyword"> const</span>00234 <span class="keyword"> </span>{GetPublicElement().DEREncode(bt);}00235 };00236 <span class="comment"></span>00237 <span class="comment">//! .</span>00238 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> GP><a name="l00239"></a><a class="code" href="class_d_l___private_key___g_f_p.html">00239</a> <span class="keyword">class </span><a class="code" href="class_d_l___private_key___g_f_p.html">DL_PrivateKey_GFP</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___private_key_impl.html">DL_PrivateKeyImpl</a><GP>00240 {00241 <span class="keyword">public</span>:00242 <span class="keywordtype">void</span> Initialize(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modulusBits)00243 {<a class="code" href="class_generatable_crypto_material.html#_x_t_r___d_ha28">GenerateRandomWithKeySize</a>(rng, modulusBits);}00244 <span class="keywordtype">void</span> Initialize(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, <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)00245 {<a class="code" href="class_d_l___private_key_impl.html#_d_l___private_key_impla3">GenerateRandom</a>(rng, MakeParameters(<span class="stringliteral">"Modulus"</span>, p)(<span class="stringliteral">"SubgroupGenerator"</span>, g));}00246 <span class="keywordtype">void</span> Initialize(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, <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> &q, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &g)00247 {<a class="code" href="class_d_l___private_key_impl.html#_d_l___private_key_impla3">GenerateRandom</a>(rng, MakeParameters(<span class="stringliteral">"Modulus"</span>, p)(<span class="stringliteral">"SubgroupOrder"</span>, q)(<span class="stringliteral">"SubgroupGenerator"</span>, g));}00248 <span class="keywordtype">void</span> Initialize(<span class="keyword">const</span> DL_GroupParameters_IntegerBased &params, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &x)00249 {AccessGroupParameters().Initialize(params); SetPrivateExponent(x);}00250 <span class="keywordtype">void</span> Initialize(<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="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &x)00251 {AccessGroupParameters().Initialize(p, g); SetPrivateExponent(x);}00252 <span class="keywordtype">void</span> Initialize(<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> &q, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &g, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &x)00253 {AccessGroupParameters().Initialize(p, q, g); SetPrivateExponent(x);}00254 };00255 <span class="comment"></span>00256 <span class="comment">//! .</span><a name="l00257"></a><a class="code" href="struct_d_l___signature_keys___g_f_p.html">00257</a> <span class="comment"></span><span class="keyword">struct </span><a class="code" href="struct_d_l___signature_keys___g_f_p.html">DL_SignatureKeys_GFP</a>00258 {00259 <span class="keyword">typedef</span> DL_GroupParameters_GFP <a class="code" href="class_d_l___group_parameters___g_f_p.html">GroupParameters</a>;00260 <span class="keyword">typedef</span> <a class="code" href="class_d_l___public_key___g_f_p.html">DL_PublicKey_GFP<GroupParameters></a> <a class="code" href="class_d_l___public_key___g_f_p.html">PublicKey</a>;00261 <span class="keyword">typedef</span> <a class="code" href="class_d_l___private_key___g_f_p.html">DL_PrivateKey_GFP<GroupParameters></a> <a class="code" href="class_d_l___private_key___g_f_p.html">PrivateKey</a>;00262 };00263 <span class="comment"></span>00264 <span class="comment">//! .</span><a name="l00265"></a><a class="code" href="struct_d_l___crypto_keys___g_f_p.html">00265</a> <span class="comment"></span><span class="keyword">struct </span><a class="code" href="struct_d_l___crypto_keys___g_f_p.html">DL_CryptoKeys_GFP</a>00266 {00267 <span class="keyword">typedef</span> DL_GroupParameters_GFP_DefaultSafePrime <a class="code" href="class_d_l___group_parameters___g_f_p___default_safe_prime.html">GroupParameters</a>;00268 <span class="keyword">typedef</span> <a class="code" href="class_d_l___public_key___g_f_p.html">DL_PublicKey_GFP<GroupParameters></a> <a class="code" href="class_d_l___public_key___g_f_p.html">PublicKey</a>;00269 <span class="keyword">typedef</span> <a class="code" href="class_d_l___private_key___g_f_p.html">DL_PrivateKey_GFP<GroupParameters></a> <a class="code" href="class_d_l___private_key___g_f_p.html">PrivateKey</a>;00270 };00271 <span class="comment"></span>00272 <span class="comment">//! provided for backwards compatibility, this class uses the old non-standard Crypto++ key format</span>00273 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> BASE><a name="l00274"></a><a class="code" href="class_d_l___public_key___g_f_p___old_format.html">00274</a> <span class="keyword">class </span><a class="code" href="class_d_l___public_key___g_f_p___old_format.html">DL_PublicKey_GFP_OldFormat</a> : <span class="keyword">public</span> BASE00275 {00276 <span class="keyword">public</span>:00277 <span class="keywordtype">void</span> BERDecode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)00278 {00279 <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> seq(bt);00280 <a class="code" href="class_integer.html">Integer</a> v1(seq);00281 <a class="code" href="class_integer.html">Integer</a> v2(seq);00282 <a class="code" href="class_integer.html">Integer</a> v3(seq);00283 00284 <span class="keywordflow">if</span> (seq.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera4">EndReached</a>())00285 {00286 AccessGroupParameters().Initialize(v1, v1/2, v2);00287 SetPublicElement(v3);00288 }00289 <span class="keywordflow">else</span>00290 {00291 <a class="code" href="class_integer.html">Integer</a> v4(seq);00292 AccessGroupParameters().Initialize(v1, v2, v3);00293 SetPublicElement(v4);00294 }00295 00296 seq.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00297 }00298 00299 <span class="keywordtype">void</span> DEREncode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)<span class="keyword"> const</span>00300 <span class="keyword"> </span>{00301 <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> seq(bt);00302 GetGroupParameters().GetModulus().DEREncode(seq);00303 <span class="keywordflow">if</span> (GetGroupParameters().GetCofactor() != 2)00304 GetGroupParameters().GetSubgroupOrder().DEREncode(seq);00305 GetGroupParameters().GetGenerator().DEREncode(seq);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?