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

📄 validat2_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00204"></a>00204         }<a name="l00205"></a>00205 <a name="l00206"></a>00206         <span class="keywordflow">if</span> (memcmp(val1.begin(), val2.begin(), d.<a class="code" href="class_simple_key_agreement_domain.html#fbf257cf0f75e66070e2636939e9c2ca" title="return length of agreed value produced">AgreedValueLength</a>()))<a name="l00207"></a>00207         {<a name="l00208"></a>00208                 cout &lt;&lt; <span class="stringliteral">"FAILED    simple agreed values not equal"</span> &lt;&lt; endl;<a name="l00209"></a>00209                 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00210"></a>00210         }<a name="l00211"></a>00211 <a name="l00212"></a>00212         cout &lt;&lt; <span class="stringliteral">"passed    simple key agreement"</span> &lt;&lt; endl;<a name="l00213"></a>00213         <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00214"></a>00214 }<a name="l00215"></a>00215 <a name="l00216"></a>00216 <span class="keywordtype">bool</span> AuthenticatedKeyAgreementValidate(<a class="code" href="class_authenticated_key_agreement_domain.html" title="interface for domains of authenticated key agreement protocols">AuthenticatedKeyAgreementDomain</a> &amp;d)<a name="l00217"></a>00217 {<a name="l00218"></a>00218         <span class="keywordflow">if</span> (d.<a class="code" href="class_key_agreement_algorithm.html#5b0e622b88d0b8d319c23e4aefef414d">GetCryptoParameters</a>().<a class="code" href="class_crypto_material.html#439743c6b4e89ca8228a12fa1ea43ab1" title="check this object for errors">Validate</a>(GlobalRNG(), 3))<a name="l00219"></a>00219                 cout &lt;&lt; <span class="stringliteral">"passed    authenticated key agreement domain parameters validation"</span> &lt;&lt; endl;<a name="l00220"></a>00220         <span class="keywordflow">else</span><a name="l00221"></a>00221         {<a name="l00222"></a>00222                 cout &lt;&lt; <span class="stringliteral">"FAILED    authenticated key agreement domain parameters invalid"</span> &lt;&lt; endl;<a name="l00223"></a>00223                 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00224"></a>00224         }<a name="l00225"></a>00225 <a name="l00226"></a>00226         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> spriv1(d.<a class="code" href="class_authenticated_key_agreement_domain.html#0a16421c7c21463f4b8a986b80f6c852" title="return length of static private keys in this domain">StaticPrivateKeyLength</a>()), spriv2(d.<a class="code" href="class_authenticated_key_agreement_domain.html#0a16421c7c21463f4b8a986b80f6c852" title="return length of static private keys in this domain">StaticPrivateKeyLength</a>());<a name="l00227"></a>00227         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> epriv1(d.<a class="code" href="class_authenticated_key_agreement_domain.html#33c0c85b5ea7b2bd97d91676997b0e34" title="return length of ephemeral private keys in this domain">EphemeralPrivateKeyLength</a>()), epriv2(d.<a class="code" href="class_authenticated_key_agreement_domain.html#33c0c85b5ea7b2bd97d91676997b0e34" title="return length of ephemeral private keys in this domain">EphemeralPrivateKeyLength</a>());<a name="l00228"></a>00228         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> spub1(d.<a class="code" href="class_authenticated_key_agreement_domain.html#744821a5d32333557adf304c09aeff6b" title="return length of static public keys in this domain">StaticPublicKeyLength</a>()), spub2(d.<a class="code" href="class_authenticated_key_agreement_domain.html#744821a5d32333557adf304c09aeff6b" title="return length of static public keys in this domain">StaticPublicKeyLength</a>());<a name="l00229"></a>00229         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> epub1(d.<a class="code" href="class_authenticated_key_agreement_domain.html#50a15071c932e3bb134c6cb8f4c6d4f1" title="return length of ephemeral public keys in this domain">EphemeralPublicKeyLength</a>()), epub2(d.<a class="code" href="class_authenticated_key_agreement_domain.html#50a15071c932e3bb134c6cb8f4c6d4f1" title="return length of ephemeral public keys in this domain">EphemeralPublicKeyLength</a>());<a name="l00230"></a>00230         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> val1(d.<a class="code" href="class_authenticated_key_agreement_domain.html#6d8b96f8a17e555bc9c6565d169a2418" title="return length of agreed value produced">AgreedValueLength</a>()), val2(d.<a class="code" href="class_authenticated_key_agreement_domain.html#6d8b96f8a17e555bc9c6565d169a2418" title="return length of agreed value produced">AgreedValueLength</a>());<a name="l00231"></a>00231 <a name="l00232"></a>00232         d.<a class="code" href="class_authenticated_key_agreement_domain.html#e2c306a6582c6e592ecb2c13abfd7c9f" title="generate private/public key pair">GenerateStaticKeyPair</a>(GlobalRNG(), spriv1, spub1);<a name="l00233"></a>00233         d.<a class="code" href="class_authenticated_key_agreement_domain.html#e2c306a6582c6e592ecb2c13abfd7c9f" title="generate private/public key pair">GenerateStaticKeyPair</a>(GlobalRNG(), spriv2, spub2);<a name="l00234"></a>00234         d.<a class="code" href="class_authenticated_key_agreement_domain.html#18f1fc5fa590be704d53759e44fba093" title="generate private/public key pair">GenerateEphemeralKeyPair</a>(GlobalRNG(), epriv1, epub1);<a name="l00235"></a>00235         d.<a class="code" href="class_authenticated_key_agreement_domain.html#18f1fc5fa590be704d53759e44fba093" title="generate private/public key pair">GenerateEphemeralKeyPair</a>(GlobalRNG(), epriv2, epub2);<a name="l00236"></a>00236 <a name="l00237"></a>00237         memset(val1.begin(), 0x10, val1.size());<a name="l00238"></a>00238         memset(val2.begin(), 0x11, val2.size());<a name="l00239"></a>00239 <a name="l00240"></a>00240         <span class="keywordflow">if</span> (!(d.<a class="code" href="class_authenticated_key_agreement_domain.html#c9808fb56eacee0c08a9bbd22fe2c98e" title="derive agreed value from your private keys and couterparty's public keys, return...">Agree</a>(val1, spriv1, epriv1, spub2, epub2) &amp;&amp; d.<a class="code" href="class_authenticated_key_agreement_domain.html#c9808fb56eacee0c08a9bbd22fe2c98e" title="derive agreed value from your private keys and couterparty's public keys, return...">Agree</a>(val2, spriv2, epriv2, spub1, epub1)))<a name="l00241"></a>00241         {<a name="l00242"></a>00242                 cout &lt;&lt; <span class="stringliteral">"FAILED    authenticated key agreement failed"</span> &lt;&lt; endl;<a name="l00243"></a>00243                 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00244"></a>00244         }<a name="l00245"></a>00245 <a name="l00246"></a>00246         <span class="keywordflow">if</span> (memcmp(val1.begin(), val2.begin(), d.<a class="code" href="class_authenticated_key_agreement_domain.html#6d8b96f8a17e555bc9c6565d169a2418" title="return length of agreed value produced">AgreedValueLength</a>()))<a name="l00247"></a>00247         {<a name="l00248"></a>00248                 cout &lt;&lt; <span class="stringliteral">"FAILED    authenticated agreed values not equal"</span> &lt;&lt; endl;<a name="l00249"></a>00249                 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00250"></a>00250         }<a name="l00251"></a>00251 <a name="l00252"></a>00252         cout &lt;&lt; <span class="stringliteral">"passed    authenticated key agreement"</span> &lt;&lt; endl;<a name="l00253"></a>00253         <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00254"></a>00254 }<a name="l00255"></a>00255 <a name="l00256"></a>00256 <span class="keywordtype">bool</span> ValidateRSA()<a name="l00257"></a>00257 {<a name="l00258"></a>00258         cout &lt;&lt; <span class="stringliteral">"\nRSA validation suite running...\n\n"</span>;<a name="l00259"></a>00259 <a name="l00260"></a>00260         byte out[100], outPlain[100];<a name="l00261"></a>00261         <span class="keywordtype">bool</span> pass = <span class="keyword">true</span>, fail;<a name="l00262"></a>00262 <a name="l00263"></a>00263         {<a name="l00264"></a>00264                 <span class="keywordtype">char</span> *plain = <span class="stringliteral">"Everyone gets Friday off."</span>;<a name="l00265"></a>00265                 byte *signature = (byte *)<a name="l00266"></a>00266                         <span class="stringliteral">"\x05\xfa\x6a\x81\x2f\xc7\xdf\x8b\xf4\xf2\x54\x25\x09\xe0\x3e\x84"</span><a name="l00267"></a>00267                         <span class="stringliteral">"\x6e\x11\xb9\xc6\x20\xbe\x20\x09\xef\xb4\x40\xef\xbc\xc6\x69\x21"</span><a name="l00268"></a>00268                         <span class="stringliteral">"\x69\x94\xac\x04\xf3\x41\xb5\x7d\x05\x20\x2d\x42\x8f\xb2\xa2\x7b"</span><a name="l00269"></a>00269                         <span class="stringliteral">"\x5c\x77\xdf\xd9\xb1\x5b\xfc\x3d\x55\x93\x53\x50\x34\x10\xc1\xe1"</span>;<a name="l00270"></a>00270 <a name="l00271"></a>00271                 <a class="code" href="class_file_source.html" title="file-based implementation of Source interface">FileSource</a> keys(<span class="stringliteral">"rsa512a.dat"</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>);<a name="l00272"></a>00272                 <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">Weak::RSASSA_PKCS1v15_MD2_Signer</a> rsaPriv(keys);<a name="l00273"></a>00273                 <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">Weak::RSASSA_PKCS1v15_MD2_Verifier</a> rsaPub(rsaPriv);<a name="l00274"></a>00274 <a name="l00275"></a>00275                 <span class="keywordtype">size_t</span> signatureLength = rsaPriv.SignMessage(GlobalRNG(), (byte *)plain, strlen(plain), out);<a name="l00276"></a>00276                 fail = memcmp(signature, out, 64) != 0;<a name="l00277"></a>00277                 pass = pass &amp;&amp; !fail;<a name="l00278"></a>00278 <a name="l00279"></a>00279                 cout &lt;&lt; (fail ? <span class="stringliteral">"FAILED    "</span> : <span class="stringliteral">"passed    "</span>);<a name="l00280"></a>00280                 cout &lt;&lt; <span class="stringliteral">"signature check against test vector\n"</span>;<a name="l00281"></a>00281 <a name="l00282"></a>00282                 fail = !rsaPub.VerifyMessage((byte *)plain, strlen(plain), out, signatureLength);<a name="l00283"></a>00283                 pass = pass &amp;&amp; !fail;<a name="l00284"></a>00284 <a name="l00285"></a>00285                 cout &lt;&lt; (fail ? <span class="stringliteral">"FAILED    "</span> : <span class="stringliteral">"passed    "</span>);<a name="l00286"></a>00286                 cout &lt;&lt; <span class="stringliteral">"verification check against test vector\n"</span>;<a name="l00287"></a>00287 <a name="l00288"></a>00288                 out[10]++;<a name="l00289"></a>00289                 fail = rsaPub.VerifyMessage((byte *)plain, strlen(plain), out, signatureLength);<a name="l00290"></a>00290                 pass = pass &amp;&amp; !fail;<a name="l00291"></a>00291 <a name="l00292"></a>00292                 cout &lt;&lt; (fail ? <span class="stringliteral">"FAILED    "</span> : <span class="stringliteral">"passed    "</span>);<a name="l00293"></a>00293                 cout &lt;&lt; <span class="stringliteral">"invalid signature verification\n"</span>;<a name="l00294"></a>00294         }<a name="l00295"></a>00295         {<a name="l00296"></a>00296                 <a class="code" href="class_file_source.html" title="file-based implementation of Source interface">FileSource</a> keys(<span class="stringliteral">"rsa1024.dat"</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>);<a name="l00297"></a>00297                 <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">RSAES_PKCS1v15_Decryptor</a> rsaPriv(keys);<a name="l00298"></a>00298                 <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">RSAES_PKCS1v15_Encryptor</a> rsaPub(rsaPriv);<a name="l00299"></a>00299 <a name="l00300"></a>00300                 pass = CryptoSystemValidate(rsaPriv, rsaPub) &amp;&amp; pass;<a name="l00301"></a>00301         }<a name="l00302"></a>00302         {<a name="l00303"></a>00303                 byte *plain = (byte *)<a name="l00304"></a>00304                         <span class="stringliteral">"\x54\x85\x9b\x34\x2c\x49\xea\x2a"</span>;<a name="l00305"></a>00305                 byte *encrypted = (byte *)<a name="l00306"></a>00306                         <span class="stringliteral">"\x14\xbd\xdd\x28\xc9\x83\x35\x19\x23\x80\xe8\xe5\x49\xb1\x58\x2a"</span><a name="l00307"></a>00307                         <span class="stringliteral">"\x8b\x40\xb4\x48\x6d\x03\xa6\xa5\x31\x1f\x1f\xd5\xf0\xa1\x80\xe4"</span><a name="l00308"></a>00308                         <span class="stringliteral">"\x17\x53\x03\x29\xa9\x34\x90\x74\xb1\x52\x13\x54\x29\x08\x24\x52"</span><a name="l00309"></a>00309                         <span class="stringliteral">"\x62\x51"</span>;<a name="l00310"></a>00310                 byte *oaepSeed = (byte *)<a name="l00311"></a>00311                         <span class="stringliteral">"\xaa\xfd\x12\xf6\x59\xca\xe6\x34\x89\xb4\x79\xe5\x07\x6d\xde\xc2"</span><a name="l00312"></a>00312                         <span class="stringliteral">"\xf0\x6c\xb5\x8f"</span>;<a name="l00313"></a>00313                 <a class="code" href="class_byte_queue.html" title="Byte Queue.">ByteQueue</a> bq;<a name="l00314"></a>00314                 bq.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(oaepSeed, 20);<a name="l00315"></a>00315                 <a class="code" href="class_fixed_r_n_g.html">FixedRNG</a> rng(bq);

⌨️ 快捷键说明

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