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&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>00207 <span class="keyword">        </span>{00208                 <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>();00209                 <span class="keywordflow">if</span> (r&gt;=q || r&lt;1 || s&gt;=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> &lt;<span class="keyword">class</span> GP&gt;<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>&lt;GP&gt;00221 {00222 <span class="keyword">public</span>:00223         <span class="keywordtype">void</span> Initialize(<span class="keyword">const</span> DL_GroupParameters_IntegerBased &amp;params, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;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> &amp;p, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;g, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;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> &amp;p, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;q, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;g, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;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> &amp;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> &amp;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> &lt;<span class="keyword">class</span> GP&gt;<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>&lt;GP&gt;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> &amp;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> &amp;rng, <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)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> &amp;rng, <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;q, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;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 &amp;params, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;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> &amp;p, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;g, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;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> &amp;p, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;q, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;g, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;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&lt;GroupParameters&gt;</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&lt;GroupParameters&gt;</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&lt;GroupParameters&gt;</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&lt;GroupParameters&gt;</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> &lt;<span class="keyword">class</span> BASE&gt;<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> &amp;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> &amp;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 + -
显示快捷键?