📄 fipstest_8cpp-source.html
字号:
<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> &encryption, <a class="code" href="class_stream_transformation.html" title="interface for the data processing part of stream ciphers">StreamTransformation</a> &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> <<span class="keyword">class</span> CIPHER><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> &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> <<span class="keyword">class</span> HASH><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> <<span class="keyword">class</span> MAC><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> <<span class="keyword">class</span> SCHEME><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> &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 + -