📄 test_8cpp-source.html
字号:
<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__) && defined(macintosh)</span><a name="l00107"></a>00107 <span class="preprocessor"></span> argc = ccommand(&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 < 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 << <span class="stringliteral">"Key length in bits: "</span>;<a name="l00127"></a>00127 cin >> keyLength;<a name="l00128"></a>00128 <a name="l00129"></a>00129 cout << <span class="stringliteral">"\nSave private key to file: "</span>;<a name="l00130"></a>00130 cin >> privFilename;<a name="l00131"></a>00131 <a name="l00132"></a>00132 cout << <span class="stringliteral">"\nSave public key to file: "</span>;<a name="l00133"></a>00133 cin >> pubFilename;<a name="l00134"></a>00134 <a name="l00135"></a>00135 cout << <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 << (verified ? <span class="stringliteral">"valid signature"</span> : <span class="stringliteral">"invalid signature"</span>) << 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 << <span class="stringliteral">"Private key file: "</span>;<a name="l00154"></a>00154 cin >> privFilename;<a name="l00155"></a>00155 <a name="l00156"></a>00156 cout << <span class="stringliteral">"\nPublic key file: "</span>;<a name="l00157"></a>00157 cin >> pubFilename;<a name="l00158"></a>00158 <a name="l00159"></a>00159 cout << <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 << <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 << <span class="stringliteral">"\nCiphertext: "</span> << ciphertext << 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 << <span class="stringliteral">"\nDecrypted: "</span> << decrypted << 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 << <span class="stringliteral">"Maurer Test Value: "</span> << mt.<a class="code" href="class_maurer_randomness_test.html#16395898502d71b76b9419868031b2d7">GetTestValue</a>() << 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 > 20*1000*1000)<a name="l00185"></a>00185 {<a name="l00186"></a>00186 cerr << <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 && optionalHeaderMagic != 0x20b)<a name="l00201"></a>00201 {<a name="l00202"></a>00202 cerr << <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 + -