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

📄 fipsalgt_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00307"></a>00307 <a name="l00308"></a>00308                         OutputData(output, <span class="stringliteral">"d "</span>, priv.GetPrivateExponent());<a name="l00309"></a>00309                         OutputData(output, <span class="stringliteral">"Qx "</span>, pub.<a class="code" href="class_d_l___public_key.html#b748086e14a92416ff49183f81f777c4">GetPublicElement</a>().x, params.GetCurve().GetField().MaxElementByteLength());<a name="l00310"></a>00310                         OutputData(output, <span class="stringliteral">"Qy "</span>, pub.<a class="code" href="class_d_l___public_key.html#b748086e14a92416ff49183f81f777c4">GetPublicElement</a>().y, params.GetCurve().GetField().MaxElementByteLength());<a name="l00311"></a>00311                 }<a name="l00312"></a>00312         }<a name="l00313"></a>00313 <a name="l00314"></a>00314         <span class="keyword">template</span> &lt;<span class="keyword">class</span> EC&gt;<a name="l00315"></a>00315         <span class="keywordtype">void</span> EC_SigGen(<span class="keywordtype">string</span> &amp;output, <span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &amp;oid)<a name="l00316"></a>00316         {<a name="l00317"></a>00317                 <a class="code" href="class_d_l___group_parameters___e_c.html" title="Elliptic Curve Parameters.">DL_GroupParameters_EC&lt;EC&gt;</a> params(oid);<a name="l00318"></a>00318                 <span class="keyword">typename</span> <a class="code" href="struct_e_c_d_s_a.html" title="ECDSA">ECDSA&lt;EC, SHA1&gt;::PrivateKey</a> priv;<a name="l00319"></a>00319                 <span class="keyword">typename</span> <a class="code" href="struct_e_c_d_s_a.html" title="ECDSA">ECDSA&lt;EC, SHA1&gt;::PublicKey</a> pub;<a name="l00320"></a>00320                 priv.Initialize(m_rng, params);<a name="l00321"></a>00321                 priv.MakePublicKey(pub);<a name="l00322"></a>00322 <a name="l00323"></a>00323                 <span class="keyword">typename</span> <a class="code" href="struct_e_c_d_s_a.html" title="ECDSA">ECDSA&lt;EC, SHA1&gt;::Signer</a> signer(priv);<a name="l00324"></a>00324                 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> sig(signer.SignatureLength());<a name="l00325"></a>00325                 <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="l00326"></a>00326                 <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="l00327"></a>00327 <a name="l00328"></a>00328                 OutputData(output, <span class="stringliteral">"Qx "</span>, pub.GetPublicElement().x, params.GetCurve().GetField().MaxElementByteLength());<a name="l00329"></a>00329                 OutputData(output, <span class="stringliteral">"Qy "</span>, pub.GetPublicElement().y, params.GetCurve().GetField().MaxElementByteLength());<a name="l00330"></a>00330                 OutputData(output, <span class="stringliteral">"R "</span>, R);<a name="l00331"></a>00331                 OutputData(output, <span class="stringliteral">"S "</span>, S);<a name="l00332"></a>00332         }<a name="l00333"></a>00333 <a name="l00334"></a>00334         <span class="keyword">template</span> &lt;<span class="keyword">class</span> EC&gt;<a name="l00335"></a>00335         <span class="keywordtype">void</span> EC_SigVer(<span class="keywordtype">string</span> &amp;output, <span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &amp;oid)<a name="l00336"></a>00336         {<a name="l00337"></a>00337                 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> x(DecodeHex(m_data[<span class="stringliteral">"Qx"</span>]));<a name="l00338"></a>00338                 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> y(DecodeHex(m_data[<span class="stringliteral">"Qy"</span>]));<a name="l00339"></a>00339                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> r((m_data[<span class="stringliteral">"R"</span>]+<span class="stringliteral">"h"</span>).c_str());<a name="l00340"></a>00340                 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> s((m_data[<span class="stringliteral">"S"</span>]+<span class="stringliteral">"h"</span>).c_str());<a name="l00341"></a>00341 <a name="l00342"></a>00342                 <span class="keyword">typename</span> EC::FieldElement Qx(x, x.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00343"></a>00343                 <span class="keyword">typename</span> EC::FieldElement Qy(y, y.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00344"></a>00344                 <span class="keyword">typename</span> EC::Element Q(Qx, Qy);<a name="l00345"></a>00345 <a name="l00346"></a>00346                 <a class="code" href="class_d_l___group_parameters___e_c.html" title="Elliptic Curve Parameters.">DL_GroupParameters_EC&lt;EC&gt;</a> params(oid);<a name="l00347"></a>00347                 <span class="keyword">typename</span> <a class="code" href="struct_e_c_d_s_a.html" title="ECDSA">ECDSA&lt;EC, SHA1&gt;::PublicKey</a> pub;<a name="l00348"></a>00348                 pub.Initialize(params, Q);<a name="l00349"></a>00349                 <span class="keyword">typename</span> <a class="code" href="struct_e_c_d_s_a.html" title="ECDSA">ECDSA&lt;EC, SHA1&gt;::Verifier</a> verifier(pub);<a name="l00350"></a>00350 <a name="l00351"></a>00351                 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> sig(verifier.SignatureLength());<a name="l00352"></a>00352                 r.Encode(sig, sig.size()/2);<a name="l00353"></a>00353                 s.Encode(sig+sig.size()/2, sig.size()/2);<a name="l00354"></a>00354 <a name="l00355"></a>00355                 <a class="code" href="class_signature_verification_filter.html" title="Filter Wrapper for PK_Verifier.">SignatureVerificationFilter</a> filter(verifier);<a name="l00356"></a>00356                 filter.Put(sig, sig.size());<a name="l00357"></a>00357                 <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_redirector.html" title="Redirect input to another BufferedTransformation without owning it.">Redirector</a>(filter, <a class="code" href="class_redirector.html#2de79d5742280aa614c218c7b950de671ca858a44d042173d50b058a34c3403c">Redirector::DATA_ONLY</a>)));<a name="l00358"></a>00358                 filter.MessageEnd();<a name="l00359"></a>00359                 byte b;<a name="l00360"></a>00360                 filter.Get(b);<a name="l00361"></a>00361                 OutputData(output, <span class="stringliteral">"Result "</span>, b ? <span class="stringliteral">"P"</span> : <span class="stringliteral">"F"</span>);<a name="l00362"></a>00362         }<a name="l00363"></a>00363 <a name="l00364"></a>00364         <span class="keyword">template</span> &lt;<span class="keyword">class</span> EC&gt;<a name="l00365"></a>00365         <span class="keyword">static</span> <span class="keywordtype">bool</span> EC_PKV(<a class="code" href="class_random_number_generator.html" title="interface for random number generators">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &amp;x, <span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &amp;y, <span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &amp;oid)<a name="l00366"></a>00366         {<a name="l00367"></a>00367                 <span class="keyword">typename</span> EC::FieldElement Qx(x, x.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00368"></a>00368                 <span class="keyword">typename</span> EC::FieldElement Qy(y, y.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00369"></a>00369                 <span class="keyword">typename</span> EC::Element Q(Qx, Qy);<a name="l00370"></a>00370 <a name="l00371"></a>00371                 <a class="code" href="class_d_l___group_parameters___e_c.html" title="Elliptic Curve Parameters.">DL_GroupParameters_EC&lt;EC&gt;</a> params(oid);<a name="l00372"></a>00372                 <span class="keyword">typename</span> <a class="code" href="struct_e_c_d_s_a.html" title="ECDSA">ECDSA&lt;EC, SHA1&gt;::PublicKey</a> pub;<a name="l00373"></a>00373                 pub.Initialize(params, Q);<a name="l00374"></a>00374                 <span class="keywordflow">return</span> pub.Validate(rng, 3);<a name="l00375"></a>00375         }<a name="l00376"></a>00376 <a name="l00377"></a>00377         <span class="keyword">template</span> &lt;<span class="keyword">class</span> H, <span class="keyword">class</span> Result&gt;<a name="l00378"></a>00378         Result * CreateRSA2(<span class="keyword">const</span> std::string &amp;standard)<a name="l00379"></a>00379         {<a name="l00380"></a>00380                 <span class="keywordflow">if</span> (<span class="keyword">typeid</span>(Result) == <span class="keyword">typeid</span>(<a class="code" href="class_p_k___verifier.html" title="interface for public-key signature verifiers">PK_Verifier</a>))<a name="l00381"></a>00381                 {<a name="l00382"></a>00382                         <span class="keywordflow">if</span> (standard == <span class="stringliteral">"R"</span>)<a name="l00383"></a>00383                                 <span class="keywordflow">return</span> (Result *) <span class="keyword">new</span> <span class="keyword">typename</span> <a class="code" href="struct_r_s_a_s_s___i_s_o.html">RSASS_ISO&lt;H&gt;::Verifier</a>;<a name="l00384"></a>00384                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (standard == <span class="stringliteral">"P"</span>)<a name="l00385"></a>00385                                 <span class="keywordflow">return</span> (Result *) <span class="keyword">new</span> <span class="keyword">typename</span> <a class="code" href="struct_r_s_a_s_s.html" title="RSA signature scheme with appendix">RSASS&lt;PSS, H&gt;::Verifier</a>;<a name="l00386"></a>00386                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (standard == <span class="stringliteral">"1"</span>)<a name="l00387"></a>00387                                 <span class="keywordflow">return</span> (Result *) <span class="keyword">new</span> <span class="keyword">typename</span> <a class="code" href="struct_r_s_a_s_s.html" title="RSA signature scheme with appendix">RSASS&lt;PKCS1v15, H&gt;::Verifier</a>;<a name="l00388"></a>00388                 }<a name="l00389"></a>00389                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">typeid</span>(Result) == <span class="keyword">typeid</span>(<a class="code" href="class_p_k___signer.html" title="interface for public-key signers">PK_Signer</a>))<a name="l00390"></a>00390                 {<a name="l00391"></a>00391                         <span class="keywordflow">if</span> (standard == <span class="stringliteral">"R"</span>)<a name="l00392"></a>00392                                 <span class="keywordflow">return</span> (Result *) <span class="keyword">new</span> <span class="keyword">typename</span> <a class="code" href="struct_r_s_a_s_s___i_s_o.html">RSASS_ISO&lt;H&gt;::Signer</a>;<a name="l00393"></a>00393                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (standard == <span class="stringliteral">"P"</span>)<a name="l00394"></a>00394                                 <span class="keywordflow">return</span> (Result *) <span class="keyword">new</span> <span class="keyword">typename</span> <a class="code" href="struct_r_s_a_s_s.html" title="RSA signature scheme with appendix">RSASS&lt;PSS, H&gt;::Signer</a>;<a name="l00395"></a>00395                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (standard == <span class="stringliteral">"1"</span>)<a name="l00396"></a>00396                                 <span class="keywordflow">return</span> (Result *) <span class="keyword">new</span> <span class="keyword">typename</span> <a class="code" href="struct_r_s_a_s_s.html" title="RSA signature scheme with appendix">RSASS&lt;PKCS1v15, H&gt;::Signer</a>;<a name="l00397"></a>00397                 }<a name="l00398"></a>00398 <a name="l00399"></a>00399                 <span class="keywordflow">return</span> NULL;<a name="l00400"></a>00400         }<a name="l00401"></a>00401 <a name="l00402"></a>00402         <span class="keyword">template</span> &lt;<span class="keyword">class</span> Result&gt;<a name="l00403"></a>00403         Result * CreateRSA(<span class="keyword">const</span> std::string &amp;standard, <span class="keyword">const</span> std::string &amp;hash)<a name="l00404"></a>00404         {<a name="l00405"></a>00405                 <span class="keywordflow">if</span> (hash == <span class="stringliteral">"1"</span>)<a name="l00406"></a>00406                         <span class="keywordflow">return</span> CreateRSA2&lt;SHA1, Result&gt;(standard);<a name="l00407"></a>00407                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hash == <span class="stringliteral">"224"</span>)<a name="l00408"></a>00408                         <span class="keywordflow">return</span> CreateRSA2&lt;SHA224, Result&gt;(standard);<a name="l00409"></a>00409                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hash == <span class="stringliteral">"256"</span>)<a name="l00410"></a>00410                         <span class="keywordflow">return</span> CreateRSA2&lt;SHA256, Result&gt;(standard);<a name="l00411"></a>00411                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hash == <span class="stringliteral">"384"</span>)<a name="l00412"></a>00412                         <span class="keywordflow">return</span> CreateRSA2&lt;SHA384, Result&gt;(standard);<a name="l00413"></a>00413                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hash == <span class="stringliteral">"512"</span>)<a name="l00414"></a>00414                         <span class="keywordflow">return</span> CreateRSA2&lt;SHA512, Result&gt;(standard);<a name="l00415"></a>00415                 <span class="keywordflow">else</span>

⌨️ 快捷键说明

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