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

📄 fipstest_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00079"></a>00079 <a name="l00080"></a>00080 <span class="keywordtype">void</span> KnownAnswerTest(<a class="code" href="class_stream_transformation.html" title="interface for the data processing part of stream ciphers">StreamTransformation</a> &amp;encryption, <a class="code" href="class_stream_transformation.html" title="interface for the data processing part of stream ciphers">StreamTransformation</a> &amp;decryption, <span class="keyword">const</span> <span class="keywordtype">char</span> *plaintext, <span class="keyword">const</span> <span class="keywordtype">char</span> *ciphertext)<a name="l00081"></a>00081 {<a name="l00082"></a>00082         <a class="code" href="class_equality_comparison_filter.html" title="A filter that checks messages on two channels for equality.">EqualityComparisonFilter</a> comparison;<a name="l00083"></a>00083 <a name="l00084"></a>00084         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(plaintext, <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_stream_transformation_filter.html" title="Filter Wrapper for StreamTransformation.">StreamTransformationFilter</a>(encryption, <span class="keyword">new</span> <a class="code" href="class_channel_switch.html" title="Route input to different and/or multiple channels based on channel ID.">ChannelSwitch</a>(comparison, <span class="stringliteral">"0"</span>), <a class="code" href="class_stream_transformation_filter.html#0a08a5d90e124cde39850d544cf32e84e7a3ed9f21b92fdbb36436d921f66ca5">StreamTransformationFilter::NO_PADDING</a>)));<a name="l00085"></a>00085         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(ciphertext, <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_channel_switch.html" title="Route input to different and/or multiple channels based on channel ID.">ChannelSwitch</a>(comparison, <span class="stringliteral">"1"</span>)));<a name="l00086"></a>00086 <a name="l00087"></a>00087         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(ciphertext, <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_stream_transformation_filter.html" title="Filter Wrapper for StreamTransformation.">StreamTransformationFilter</a>(decryption, <span class="keyword">new</span> <a class="code" href="class_channel_switch.html" title="Route input to different and/or multiple channels based on channel ID.">ChannelSwitch</a>(comparison, <span class="stringliteral">"0"</span>), <a class="code" href="class_stream_transformation_filter.html#0a08a5d90e124cde39850d544cf32e84e7a3ed9f21b92fdbb36436d921f66ca5">StreamTransformationFilter::NO_PADDING</a>)));<a name="l00088"></a>00088         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(plaintext, <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_channel_switch.html" title="Route input to different and/or multiple channels based on channel ID.">ChannelSwitch</a>(comparison, <span class="stringliteral">"1"</span>)));<a name="l00089"></a>00089 <a name="l00090"></a>00090         comparison.<a class="code" href="class_equality_comparison_filter.html#97d5eb6fd119c9bdbee7d08b98450667">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"0"</span>);<a name="l00091"></a>00091         comparison.<a class="code" href="class_equality_comparison_filter.html#97d5eb6fd119c9bdbee7d08b98450667">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"1"</span>);<a name="l00092"></a>00092 }<a name="l00093"></a>00093 <a name="l00094"></a>00094 <span class="keyword">template</span> &lt;<span class="keyword">class</span> CIPHER&gt;<a name="l00095"></a>00095 <span class="keywordtype">void</span> SymmetricEncryptionKnownAnswerTest(<a name="l00096"></a>00096         <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <a name="l00097"></a>00097         <span class="keyword">const</span> <span class="keywordtype">char</span> *hexIV, <a name="l00098"></a>00098         <span class="keyword">const</span> <span class="keywordtype">char</span> *plaintext, <a name="l00099"></a>00099         <span class="keyword">const</span> <span class="keywordtype">char</span> *ecb,<a name="l00100"></a>00100         <span class="keyword">const</span> <span class="keywordtype">char</span> *cbc,<a name="l00101"></a>00101         <span class="keyword">const</span> <span class="keywordtype">char</span> *cfb,<a name="l00102"></a>00102         <span class="keyword">const</span> <span class="keywordtype">char</span> *ofb,<a name="l00103"></a>00103         <span class="keyword">const</span> <span class="keywordtype">char</span> *ctr,<a name="l00104"></a>00104         CIPHER *dummy = NULL)<a name="l00105"></a>00105 {<a name="l00106"></a>00106         std::string decodedKey;<a name="l00107"></a>00107         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(key, <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_string_sink_template.html" title="Append input to a string object.">StringSink</a>(decodedKey)));<a name="l00108"></a>00108 <a name="l00109"></a>00109         <span class="keyword">typename</span> CIPHER::Encryption encryption((<span class="keyword">const</span> byte *)decodedKey.data(), decodedKey.size());<a name="l00110"></a>00110         <span class="keyword">typename</span> CIPHER::Decryption decryption((<span class="keyword">const</span> byte *)decodedKey.data(), decodedKey.size());<a name="l00111"></a>00111 <a name="l00112"></a>00112         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> iv(encryption.BlockSize());<a name="l00113"></a>00113         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(hexIV, <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_array_sink.html" title="Copy input to a memory buffer.">ArraySink</a>(iv, iv.size())));<a name="l00114"></a>00114 <a name="l00115"></a>00115         <span class="keywordflow">if</span> (ecb)<a name="l00116"></a>00116                 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">ECB_Mode_ExternalCipher::Encryption</a>(encryption).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">ECB_Mode_ExternalCipher::Decryption</a>(decryption).Ref(), plaintext, ecb);<a name="l00117"></a>00117         <span class="keywordflow">if</span> (cbc)<a name="l00118"></a>00118                 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">CBC_Mode_ExternalCipher::Encryption</a>(encryption, iv).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">CBC_Mode_ExternalCipher::Decryption</a>(decryption, iv).Ref(), plaintext, cbc);<a name="l00119"></a>00119         <span class="keywordflow">if</span> (cfb)<a name="l00120"></a>00120                 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">CFB_Mode_ExternalCipher::Encryption</a>(encryption, iv).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">CFB_Mode_ExternalCipher::Decryption</a>(encryption, iv).Ref(), plaintext, cfb);<a name="l00121"></a>00121         <span class="keywordflow">if</span> (ofb)<a name="l00122"></a>00122                 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">OFB_Mode_ExternalCipher::Encryption</a>(encryption, iv).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">OFB_Mode_ExternalCipher::Decryption</a>(encryption, iv).Ref(), plaintext, ofb);<a name="l00123"></a>00123         <span class="keywordflow">if</span> (ctr)<a name="l00124"></a>00124                 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">CTR_Mode_ExternalCipher::Encryption</a>(encryption, iv).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html" title="_">CTR_Mode_ExternalCipher::Decryption</a>(encryption, iv).Ref(), plaintext, ctr);<a name="l00125"></a>00125 }<a name="l00126"></a>00126 <a name="l00127"></a>00127 <span class="keywordtype">void</span> KnownAnswerTest(<a class="code" href="class_hash_transformation.html" title="interface for hash functions and data processing part of MACs">HashTransformation</a> &amp;hash, <span class="keyword">const</span> <span class="keywordtype">char</span> *message, <span class="keyword">const</span> <span class="keywordtype">char</span> *digest)<a name="l00128"></a>00128 {<a name="l00129"></a>00129         <a class="code" href="class_equality_comparison_filter.html" title="A filter that checks messages on two channels for equality.">EqualityComparisonFilter</a> comparison;<a name="l00130"></a>00130         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(digest, <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_channel_switch.html" title="Route input to different and/or multiple channels based on channel ID.">ChannelSwitch</a>(comparison, <span class="stringliteral">"1"</span>)));<a name="l00131"></a>00131         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(message, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hash_filter.html" title="Filter Wrapper for HashTransformation.">HashFilter</a>(hash, <span class="keyword">new</span> <a class="code" href="class_channel_switch.html" title="Route input to different and/or multiple channels based on channel ID.">ChannelSwitch</a>(comparison, <span class="stringliteral">"0"</span>)));<a name="l00132"></a>00132 <a name="l00133"></a>00133         comparison.<a class="code" href="class_equality_comparison_filter.html#97d5eb6fd119c9bdbee7d08b98450667">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"0"</span>);<a name="l00134"></a>00134         comparison.<a class="code" href="class_equality_comparison_filter.html#97d5eb6fd119c9bdbee7d08b98450667">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"1"</span>);<a name="l00135"></a>00135 }<a name="l00136"></a>00136 <a name="l00137"></a>00137 <span class="keyword">template</span> &lt;<span class="keyword">class</span> HASH&gt;<a name="l00138"></a>00138 <span class="keywordtype">void</span> SecureHashKnownAnswerTest(<span class="keyword">const</span> <span class="keywordtype">char</span> *message, <span class="keyword">const</span> <span class="keywordtype">char</span> *digest, HASH *dummy = NULL)<a name="l00139"></a>00139 {<a name="l00140"></a>00140         HASH hash;<a name="l00141"></a>00141         KnownAnswerTest(hash, message, digest);<a name="l00142"></a>00142 }<a name="l00143"></a>00143 <a name="l00144"></a>00144 <span class="keyword">template</span> &lt;<span class="keyword">class</span> MAC&gt;<a name="l00145"></a>00145 <span class="keywordtype">void</span> MAC_KnownAnswerTest(<span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keyword">const</span> <span class="keywordtype">char</span> *message, <span class="keyword">const</span> <span class="keywordtype">char</span> *digest, MAC *dummy = NULL)<a name="l00146"></a>00146 {<a name="l00147"></a>00147         std::string decodedKey;<a name="l00148"></a>00148         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(key, <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_string_sink_template.html" title="Append input to a string object.">StringSink</a>(decodedKey)));<a name="l00149"></a>00149 <a name="l00150"></a>00150         MAC mac((<span class="keyword">const</span> byte *)decodedKey.data(), decodedKey.size());<a name="l00151"></a>00151         KnownAnswerTest(mac, message, digest);<a name="l00152"></a>00152 }<a name="l00153"></a>00153 <a name="l00154"></a>00154 <span class="keyword">template</span> &lt;<span class="keyword">class</span> SCHEME&gt;<a name="l00155"></a>00155 <span class="keywordtype">void</span> SignatureKnownAnswerTest(<span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keyword">const</span> <span class="keywordtype">char</span> *message, <span class="keyword">const</span> <span class="keywordtype">char</span> *signature, SCHEME *dummy = NULL)<a name="l00156"></a>00156 {<a name="l00157"></a>00157 <span class="preprocessor">#ifdef OS_RNG_AVAILABLE</span><a name="l00158"></a>00158 <span class="preprocessor"></span>        <a class="code" href="class_auto_seeded_random_pool.html" title="Automaticly Seeded Randomness Pool.">DefaultAutoSeededRNG</a> rng;<a name="l00159"></a>00159 <span class="preprocessor">#else</span><a name="l00160"></a>00160 <span class="preprocessor"></span>        <a class="code" href="class_random_number_generator.html" title="interface for random number generators">RandomNumberGenerator</a> &amp;rng = NullRNG();<a name="l00161"></a>00161 <span class="preprocessor">#endif</span><a name="l00162"></a>00162 <span class="preprocessor"></span><a name="l00163"></a>00163         <span class="keyword">typename</span> SCHEME::Signer signer(<a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(key, <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>).Ref());<a name="l00164"></a>00164         <span class="keyword">typename</span> SCHEME::Verifier verifier(signer);<a name="l00165"></a>00165 <a name="l00166"></a>00166         <a class="code" href="class_equality_comparison_filter.html" title="A filter that checks messages on two channels for equality.">EqualityComparisonFilter</a> comparison;<a name="l00167"></a>00167 <a name="l00168"></a>00168         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(message, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_signer_filter.html" title="Filter Wrapper for PK_Signer.">SignerFilter</a>(rng, signer, <span class="keyword">new</span> <a class="code" href="class_channel_switch.html" title="Route input to different and/or multiple channels based on channel ID.">ChannelSwitch</a>(comparison, <span class="stringliteral">"0"</span>)));<a name="l00169"></a>00169         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(signature, <span class="keyword">true</span>, <span class="keyword">new</span> HexDecoder(<span class="keyword">new</span> <a class="code" href="class_channel_switch.html" title="Route input to different and/or multiple channels based on channel ID.">ChannelSwitch</a>(comparison, <span class="stringliteral">"1"</span>)));<a name="l00170"></a>00170 <a name="l00171"></a>00171         comparison.<a class="code" href="class_equality_comparison_filter.html#97d5eb6fd119c9bdbee7d08b98450667">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"0"</span>);<a name="l00172"></a>00172         comparison.<a class="code" href="class_equality_comparison_filter.html#97d5eb6fd119c9bdbee7d08b98450667">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"1"</span>);<a name="l00173"></a>00173 <a name="l00174"></a>00174         <a class="code" href="class_signature_verification_filter.html" title="Filter Wrapper for PK_Verifier.">VerifierFilter</a> verifierFilter(verifier, NULL, <a class="code" href="class_signature_verification_filter.html#3673220151c47758b53dda37c821018026bac40d24e37a841fcd91b072708baa">VerifierFilter::SIGNATURE_AT_BEGIN</a> | <a class="code" href="class_signature_verification_filter.html#3673220151c47758b53dda37c82101802b9d85ccbc2be3ca34f45bf78b948c23">VerifierFilter::THROW_EXCEPTION</a>);<a name="l00175"></a>00175         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(signature, <span class="keyword">true</span>, <span class="keyword">new</span> HexDecoder(<span class="keyword">new</span> <a class="code" href="class_redirector.html" title="Redirect input to another BufferedTransformation without owning it.">Redirector</a>(verifierFilter, <a class="code" href="class_redirector.html#2de79d5742280aa614c218c7b950de671ca858a44d042173d50b058a34c3403c">Redirector::DATA_ONLY</a>)));<a name="l00176"></a>00176         <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(message, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_redirector.html" title="Redirect input to another BufferedTransformation without owning it.">Redirector</a>(verifierFilter));<a name="l00177"></a>00177 }

⌨️ 快捷键说明

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