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

📄 fipsalgt_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00416"></a>00416                         <span class="keywordflow">return</span> NULL;<a name="l00417"></a>00417         }<a name="l00418"></a>00418 <a name="l00419"></a>00419         <span class="keyword">virtual</span> <span class="keywordtype">void</span> DoTest()<a name="l00420"></a>00420         {<a name="l00421"></a>00421                 std::string output;<a name="l00422"></a>00422 <a name="l00423"></a>00423                 <span class="keywordflow">if</span> (m_algorithm == <span class="stringliteral">"DSA"</span>)<a name="l00424"></a>00424                 {<a name="l00425"></a>00425                         <span class="keywordflow">if</span> (m_test == <span class="stringliteral">"KeyPair"</span>)<a name="l00426"></a>00426                         {<a name="l00427"></a>00427                                 <a class="code" href="class_d_l___group_parameters___d_s_a.html" title="DSA group parameters, these are GF(p) group parameters that are allowed by the DSA...">DL_GroupParameters_DSA</a> pqg;<a name="l00428"></a>00428                                 <span class="keywordtype">int</span> modLen = atol(m_bracketString.substr(6).c_str());<a name="l00429"></a>00429                                 pqg.<a class="code" href="class_generatable_crypto_material.html#38d492343c32e530a5c2781b5797f755" title="calls the above function with a NameValuePairs object that just specifies "KeySize"...">GenerateRandomWithKeySize</a>(m_rng, modLen);<a name="l00430"></a>00430 <a name="l00431"></a>00431                                 OutputData(output, <span class="stringliteral">"P "</span>, pqg.<a class="code" href="class_d_l___group_parameters___integer_based_impl.html#2c3b85d7565e222bb5492ae7d141ec85">GetModulus</a>());<a name="l00432"></a>00432                                 OutputData(output, <span class="stringliteral">"Q "</span>, pqg.<a class="code" href="class_d_l___group_parameters___integer_based.html#e6eb7fd2937f5eee9740d0db173f0475">GetSubgroupOrder</a>());<a name="l00433"></a>00433                                 OutputData(output, <span class="stringliteral">"G "</span>, pqg.<a class="code" href="class_d_l___group_parameters.html#8537f155cb10263bf7014ad676d1c70b">GetSubgroupGenerator</a>());<a name="l00434"></a>00434 <a name="l00435"></a>00435                                 <span class="keywordtype">int</span> n = atol(m_data[<span class="stringliteral">"N"</span>].c_str());<a name="l00436"></a>00436                                 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;n; i++)<a name="l00437"></a>00437                                 {<a name="l00438"></a>00438                                         <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">DSA::Signer</a> priv;<a name="l00439"></a>00439                                         priv.AccessKey().GenerateRandom(m_rng, pqg);<a name="l00440"></a>00440                                         <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">DSA::Verifier</a> pub(priv);<a name="l00441"></a>00441 <a name="l00442"></a>00442                                         OutputData(output, <span class="stringliteral">"X "</span>, priv.GetKey().GetPrivateExponent());<a name="l00443"></a>00443                                         OutputData(output, <span class="stringliteral">"Y "</span>, pub.GetKey().GetPublicElement());<a name="l00444"></a>00444                                         AttachedTransformation()-&gt;Put((byte *)output.data(), output.size());<a name="l00445"></a>00445                                         output.resize(0);<a name="l00446"></a>00446                                 }<a name="l00447"></a>00447                         }<a name="l00448"></a>00448                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_test == <span class="stringliteral">"PQGGen"</span>)<a name="l00449"></a>00449                         {<a name="l00450"></a>00450                                 <span class="keywordtype">int</span> n = atol(m_data[<span class="stringliteral">"N"</span>].c_str());<a name="l00451"></a>00451                                 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;n; i++)<a name="l00452"></a>00452                                 {<a name="l00453"></a>00453                                         <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> p, q, h, g;<a name="l00454"></a>00454                                         <span class="keywordtype">int</span> counter;<a name="l00455"></a>00455                                         <a name="l00456"></a>00456                                         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> seed(<a class="code" href="class_iterated_hash_with_static_transform.html#86286d03ba76ccdd7bf3007088250859">SHA::DIGESTSIZE</a>);<a name="l00457"></a>00457                                         <span class="keywordflow">do</span><a name="l00458"></a>00458                                         {<a name="l00459"></a>00459                                                 m_rng.GenerateBlock(seed, seed.size());<a name="l00460"></a>00460                                         }<a name="l00461"></a>00461                                         <span class="keywordflow">while</span> (!<a class="code" href="struct_d_s_a.html#48eab0da4234a2d20f3ef7250fbad5f5" title="Generate DSA primes according to NIST standard.">DSA::GeneratePrimes</a>(seed, seed.size()*8, counter, p, 1024, q));<a name="l00462"></a>00462                                         h.Randomize(m_rng, 2, p-2);<a name="l00463"></a>00463                                         g = a_exp_b_mod_c(h, (p-1)/q, p);<a name="l00464"></a>00464 <a name="l00465"></a>00465                                         OutputData(output, <span class="stringliteral">"P "</span>, p);<a name="l00466"></a>00466                                         OutputData(output, <span class="stringliteral">"Q "</span>, q);<a name="l00467"></a>00467                                         OutputData(output, <span class="stringliteral">"G "</span>, g);<a name="l00468"></a>00468                                         OutputData(output, <span class="stringliteral">"Seed "</span>, seed);<a name="l00469"></a>00469                                         OutputData(output, <span class="stringliteral">"c "</span>, counter);<a name="l00470"></a>00470                                         OutputData(output, <span class="stringliteral">"H "</span>, h, p.ByteCount());<a name="l00471"></a>00471                                         AttachedTransformation()-&gt;Put((byte *)output.data(), output.size());<a name="l00472"></a>00472                                         output.resize(0);<a name="l00473"></a>00473                                 }<a name="l00474"></a>00474                         }<a name="l00475"></a>00475                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_test == <span class="stringliteral">"SigGen"</span>)<a name="l00476"></a>00476                         {<a name="l00477"></a>00477                                 std::string &amp;encodedKey = m_data[<span class="stringliteral">"PrivKey"</span>];<a name="l00478"></a>00478                                 <span class="keywordtype">int</span> modLen = atol(m_bracketString.substr(6).c_str());<a name="l00479"></a>00479                                 <a class="code" href="class_d_l___private_key___with_signature_pairwise_consistency_test.html" title="_">DSA::PrivateKey</a> priv;<a name="l00480"></a>00480 <a name="l00481"></a>00481                                 <span class="keywordflow">if</span> (!encodedKey.empty())<a name="l00482"></a>00482                                 {<a name="l00483"></a>00483                                         <a class="code" href="class_string_store.html" title="string-based implementation of Store interface">StringStore</a> s(encodedKey);<a name="l00484"></a>00484                                         priv.BERDecode(s);<a name="l00485"></a>00485                                         <span class="keywordflow">if</span> (priv.GetGroupParameters().GetModulus().BitCount() != modLen)<a name="l00486"></a>00486                                                 encodedKey.clear();<a name="l00487"></a>00487                                 }<a name="l00488"></a>00488 <a name="l00489"></a>00489                                 <span class="keywordflow">if</span> (encodedKey.empty())<a name="l00490"></a>00490                                 {<a name="l00491"></a>00491                                         priv.<a class="code" href="class_buffered_transformation.html#0dd5456c06e0e47d901e8055b50df929" title="initialize or reinitialize this object">Initialize</a>(m_rng, modLen);<a name="l00492"></a>00492                                         <a class="code" href="class_string_sink_template.html" title="Append input to a string object.">StringSink</a> s(encodedKey);<a name="l00493"></a>00493                                         priv.DEREncode(s);<a name="l00494"></a>00494                                         OutputData(output, <span class="stringliteral">"P "</span>, priv.GetGroupParameters().GetModulus());<a name="l00495"></a>00495                                         OutputData(output, <span class="stringliteral">"Q "</span>, priv.GetGroupParameters().GetSubgroupOrder());<a name="l00496"></a>00496                                         OutputData(output, <span class="stringliteral">"G "</span>, priv.GetGroupParameters().GetSubgroupGenerator());<a name="l00497"></a>00497                                 }<a name="l00498"></a>00498 <a name="l00499"></a>00499                                 <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">DSA::Signer</a> signer(priv);<a name="l00500"></a>00500                                 <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">DSA::Verifier</a> pub(signer);<a name="l00501"></a>00501                                 OutputData(output, <span class="stringliteral">"Msg "</span>, m_data[<span class="stringliteral">"Msg"</span>]);<a name="l00502"></a>00502                                 OutputData(output, <span class="stringliteral">"Y "</span>, pub.GetKey().GetPublicElement());<a name="l00503"></a>00503 <a name="l00504"></a>00504                                 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> sig(signer.SignatureLength());<a name="l00505"></a>00505                                 <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(m_data[<span class="stringliteral">"Msg"</span>], <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html" title="Decode base 16 data back to bytes.">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_signer_filter.html" title="Filter Wrapper for PK_Signer.">SignerFilter</a>(m_rng, signer, <span class="keyword">new</span> <a class="code" href="class_array_sink.html" title="Copy input to a memory buffer.">ArraySink</a>(sig, sig.size()))));<a name="l00506"></a>00506                                 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> R(sig, sig.size()/2), S(sig+sig.size()/2, sig.size()/2);<a name="l00507"></a>00507                                 OutputData(output, <span class="stringliteral">"R "</span>, R);<a name="l00508"></a>00508                                 OutputData(output, <span class="stringliteral">"S "</span>, S);<a name="l00509"></a>00509                                 AttachedTransformation()-&gt;Put((byte *)output.data(), output.size());<a name="l00510"></a>00510                                 output.resize(0);<a name="l00511"></a>00511                         }<a name="l00512"></a>00512                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_test == <span class="stringliteral">"SigVer"</span>)<a name="l00513"></a>00513                         {<a name="l00514"></a>00514                                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> p((m_data[<span class="stringliteral">"P"</span>] + <span class="stringliteral">"h"</span>).c_str());<a name="l00515"></a>00515                                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> q((m_data[<span class="stringliteral">"Q"</span>] + <span class="stringliteral">"h"</span>).c_str());<a name="l00516"></a>00516                                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> g((m_data[<span class="stringliteral">"G"</span>] + <span class="stringliteral">"h"</span>).c_str());<a name="l00517"></a>00517                                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> y((m_data[<span class="stringliteral">"Y"</span>] + <span class="stringliteral">"h"</span>).c_str());<a name="l00518"></a>00518                                 <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">DSA::Verifier</a> verifier(p, q, g, y);<a name="l00519"></a>00519 <a name="l00520"></a>00520                                 <a class="code" href="class_hex_decoder.html" title="Decode base 16 data back to bytes.">HexDecoder</a> filter(<span class="keyword">new</span> <a class="code" href="class_signature_verification_filter.html" title="Filter Wrapper for PK_Verifier.">SignatureVerificationFilter</a>(verifier));<a name="l00521"></a>00521                                 <a class="code" href="class_string_source.html" title="string-based implementation of Source interfac

⌨️ 快捷键说明

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