📄 fipsalgt_8cpp-source.html
字号:
<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<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()->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<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()->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 &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()->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 + -