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

📄 test_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00092"></a>00092 <a name="l00093"></a>00093 <span class="keywordtype">bool</span> Validate(<span class="keywordtype">int</span>, <span class="keywordtype">bool</span>, const <span class="keywordtype">char</span> *);<a name="l00094"></a>00094 <a name="l00095"></a>00095 <span class="keywordtype">int</span> (*AdhocTest)(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[]) = NULL;<a name="l00096"></a>00096 <a name="l00097"></a>00097 <span class="keywordtype">int</span> CRYPTOPP_API main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])<a name="l00098"></a>00098 {<a name="l00099"></a>00099 <span class="preprocessor">#ifdef _CRTDBG_LEAK_CHECK_DF</span><a name="l00100"></a>00100 <span class="preprocessor"></span>        <span class="comment">// Turn on leak-checking</span><a name="l00101"></a>00101         <span class="keywordtype">int</span> tempflag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );<a name="l00102"></a>00102         tempflag |= _CRTDBG_LEAK_CHECK_DF;<a name="l00103"></a>00103         _CrtSetDbgFlag( tempflag );<a name="l00104"></a>00104 <span class="preprocessor">#endif</span><a name="l00105"></a>00105 <span class="preprocessor"></span><a name="l00106"></a>00106 <span class="preprocessor">#if defined(__MWERKS__) &amp;&amp; defined(macintosh)</span><a name="l00107"></a>00107 <span class="preprocessor"></span>        argc = ccommand(&amp;argv);<a name="l00108"></a>00108 <span class="preprocessor">#endif</span><a name="l00109"></a>00109 <span class="preprocessor"></span><a name="l00110"></a>00110         <span class="keywordflow">try</span><a name="l00111"></a>00111         {<a name="l00112"></a>00112                 RegisterFactories();<a name="l00113"></a>00113 <a name="l00114"></a>00114                 std::string command, executableName, macFilename;<a name="l00115"></a>00115 <a name="l00116"></a>00116                 <span class="keywordflow">if</span> (argc &lt; 2)<a name="l00117"></a>00117                         command = <span class="charliteral">'h'</span>;<a name="l00118"></a>00118                 <span class="keywordflow">else</span><a name="l00119"></a>00119                         command = argv[1];<a name="l00120"></a>00120 <a name="l00121"></a>00121                 <span class="keywordflow">if</span> (command == <span class="stringliteral">"g"</span>)<a name="l00122"></a>00122                 {<a name="l00123"></a>00123                         <span class="keywordtype">char</span> seed[1024], privFilename[128], pubFilename[128];<a name="l00124"></a>00124                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> keyLength;<a name="l00125"></a>00125 <a name="l00126"></a>00126                         cout &lt;&lt; <span class="stringliteral">"Key length in bits: "</span>;<a name="l00127"></a>00127                         cin &gt;&gt; keyLength;<a name="l00128"></a>00128 <a name="l00129"></a>00129                         cout &lt;&lt; <span class="stringliteral">"\nSave private key to file: "</span>;<a name="l00130"></a>00130                         cin &gt;&gt; privFilename;<a name="l00131"></a>00131 <a name="l00132"></a>00132                         cout &lt;&lt; <span class="stringliteral">"\nSave public key to file: "</span>;<a name="l00133"></a>00133                         cin &gt;&gt; pubFilename;<a name="l00134"></a>00134 <a name="l00135"></a>00135                         cout &lt;&lt; <span class="stringliteral">"\nRandom Seed: "</span>;<a name="l00136"></a>00136                         ws(cin);<a name="l00137"></a>00137                         cin.getline(seed, 1024);<a name="l00138"></a>00138 <a name="l00139"></a>00139                         GenerateRSAKey(keyLength, privFilename, pubFilename, seed);<a name="l00140"></a>00140                 }<a name="l00141"></a>00141                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"rs"</span>)<a name="l00142"></a>00142                         RSASignFile(argv[2], argv[3], argv[4]);<a name="l00143"></a>00143                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"rv"</span>)<a name="l00144"></a>00144                 {<a name="l00145"></a>00145                         <span class="keywordtype">bool</span> verified = RSAVerifyFile(argv[2], argv[3], argv[4]);<a name="l00146"></a>00146                         cout &lt;&lt; (verified ? <span class="stringliteral">"valid signature"</span> : <span class="stringliteral">"invalid signature"</span>) &lt;&lt; endl;<a name="l00147"></a>00147                 }<a name="l00148"></a>00148                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"r"</span>)<a name="l00149"></a>00149                 {<a name="l00150"></a>00150                         <span class="keywordtype">char</span> privFilename[128], pubFilename[128];<a name="l00151"></a>00151                         <span class="keywordtype">char</span> seed[1024], message[1024];<a name="l00152"></a>00152 <a name="l00153"></a>00153                         cout &lt;&lt; <span class="stringliteral">"Private key file: "</span>;<a name="l00154"></a>00154                         cin &gt;&gt; privFilename;<a name="l00155"></a>00155 <a name="l00156"></a>00156                         cout &lt;&lt; <span class="stringliteral">"\nPublic key file: "</span>;<a name="l00157"></a>00157                         cin &gt;&gt; pubFilename;<a name="l00158"></a>00158 <a name="l00159"></a>00159                         cout &lt;&lt; <span class="stringliteral">"\nRandom Seed: "</span>;<a name="l00160"></a>00160                         ws(cin);<a name="l00161"></a>00161                         cin.getline(seed, 1024);<a name="l00162"></a>00162 <a name="l00163"></a>00163                         cout &lt;&lt; <span class="stringliteral">"\nMessage: "</span>;<a name="l00164"></a>00164                         cin.getline(message, 1024);<a name="l00165"></a>00165 <a name="l00166"></a>00166                         <span class="keywordtype">string</span> ciphertext = RSAEncryptString(pubFilename, seed, message);<a name="l00167"></a>00167                         cout &lt;&lt; <span class="stringliteral">"\nCiphertext: "</span> &lt;&lt; ciphertext &lt;&lt; endl;<a name="l00168"></a>00168 <a name="l00169"></a>00169                         <span class="keywordtype">string</span> decrypted = RSADecryptString(privFilename, ciphertext.c_str());<a name="l00170"></a>00170                         cout &lt;&lt; <span class="stringliteral">"\nDecrypted: "</span> &lt;&lt; decrypted &lt;&lt; endl;<a name="l00171"></a>00171                 }<a name="l00172"></a>00172                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"mt"</span>)<a name="l00173"></a>00173                 {<a name="l00174"></a>00174                         <a class="code" href="class_maurer_randomness_test.html" title="This class implements Maurer's Universal Statistical Test for Random Bit Generators...">MaurerRandomnessTest</a> mt;<a name="l00175"></a>00175                         <a class="code" href="class_file_store.html" title="file-based implementation of Store interface">FileStore</a> fs(argv[2]);<a name="l00176"></a>00176                         fs.TransferAllTo(mt);<a name="l00177"></a>00177                         cout &lt;&lt; <span class="stringliteral">"Maurer Test Value: "</span> &lt;&lt; mt.<a class="code" href="class_maurer_randomness_test.html#16395898502d71b76b9419868031b2d7">GetTestValue</a>() &lt;&lt; endl;<a name="l00178"></a>00178                 }<a name="l00179"></a>00179                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"mac_dll"</span>)<a name="l00180"></a>00180                 {<a name="l00181"></a>00181                         <span class="comment">// sanity check on file size</span><a name="l00182"></a>00182                         std::fstream dllFile(argv[2], ios::in | ios::out | ios::binary);<a name="l00183"></a>00183                         std::ifstream::pos_type fileEnd = dllFile.seekg(0, std::ios_base::end).tellg();<a name="l00184"></a>00184                         <span class="keywordflow">if</span> (fileEnd &gt; 20*1000*1000)<a name="l00185"></a>00185                         {<a name="l00186"></a>00186                                 cerr &lt;&lt; <span class="stringliteral">"Input file too large (more than 20 MB).\n"</span>;<a name="l00187"></a>00187                                 <span class="keywordflow">return</span> 1;<a name="l00188"></a>00188                         }<a name="l00189"></a>00189 <a name="l00190"></a>00190                         <span class="comment">// read file into memory</span><a name="l00191"></a>00191                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fileSize = (<span class="keywordtype">unsigned</span> int)fileEnd;<a name="l00192"></a>00192                         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> buf(fileSize);<a name="l00193"></a>00193                         dllFile.seekg(0, std::ios_base::beg);<a name="l00194"></a>00194                         dllFile.read((<span class="keywordtype">char</span> *)buf.begin(), fileSize);<a name="l00195"></a>00195 <a name="l00196"></a>00196                         <span class="comment">// find positions of relevant sections in the file, based on version 8 of documentation from http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx</span><a name="l00197"></a>00197                         word32 coffPos = *(word16 *)(buf+0x3c);<a name="l00198"></a>00198                         word32 optionalHeaderPos = coffPos + 24;<a name="l00199"></a>00199                         word16 optionalHeaderMagic = *(word16 *)(buf+optionalHeaderPos);<a name="l00200"></a>00200                         <span class="keywordflow">if</span> (optionalHeaderMagic != 0x10b &amp;&amp; optionalHeaderMagic != 0x20b)<a name="l00201"></a>00201                         {<a name="l00202"></a>00202                                 cerr &lt;&lt; <span class="stringliteral">"Target file is not a PE32 or PE32+ image.\n"</span>;<a name="l00203"></a>00203                                 <span class="keywordflow">return</span> 3;

⌨️ 快捷键说明

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