📄 fipstest_8cpp-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Crypto++: fipstest.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.2 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Compound List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Compound Members</a> | <a class="qindex" href="globals.html">File Members</a></div><h1>fipstest.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// fipstest.cpp - written and placed in the public domain by Wei Dai</span>00002 00003 <span class="preprocessor">#include "pch.h"</span>00004 00005 <span class="preprocessor">#ifndef CRYPTOPP_IMPORTS</span>00006 <span class="preprocessor"></span>00007 <span class="preprocessor">#include "dll.h"</span>00008 <span class="preprocessor">#include <windows.h></span>00009 00010 NAMESPACE_BEGIN(CryptoPP)00011 00012 <span class="keyword">extern</span> <a class="code" href="fips140_8h.html#a14">PowerUpSelfTestStatus</a> g_powerUpSelfTestStatus;00013 <a class="code" href="class_sec_block.html">SecByteBlock</a> g_actualMac;00014 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> g_macFileLocation = 0;00015 00016 <span class="keyword">const</span> byte * CRYPTOPP_API GetActualMacAndLocation(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &macSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &fileLocation)00017 {00018 macSize = g_actualMac.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>();00019 fileLocation = g_macFileLocation;00020 <span class="keywordflow">return</span> g_actualMac;00021 }00022 00023 <span class="keywordtype">void</span> KnownAnswerTest(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, <span class="keyword">const</span> <span class="keywordtype">char</span> *output)00024 {00025 <a class="code" href="class_equality_comparison_filter.html">EqualityComparisonFilter</a> comparison;00026 00027 <a class="code" href="class_random_number_store.html">RandomNumberStore</a>(rng, strlen(output)/2).TransferAllTo(comparison, <span class="stringliteral">"0"</span>);00028 <a class="code" href="class_string_source.html">StringSource</a>(output, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>(comparison, <span class="stringliteral">"1"</span>)));00029 00030 comparison.<a class="code" href="class_equality_comparison_filter.html#_equality_comparison_filtera3">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"0"</span>);00031 comparison.<a class="code" href="class_equality_comparison_filter.html#_equality_comparison_filtera3">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"1"</span>);00032 }00033 00034 <span class="keyword">template</span> <<span class="keyword">class</span> CIPHER>00035 <span class="keywordtype">void</span> X917RNG_KnownAnswerTest(00036 <span class="keyword">const</span> <span class="keywordtype">char</span> *key, 00037 <span class="keyword">const</span> <span class="keywordtype">char</span> *seed, 00038 <span class="keyword">const</span> <span class="keywordtype">char</span> *output,00039 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> deterministicTimeVector,00040 CIPHER *dummy = NULL)00041 {00042 std::string decodedKey, decodedSeed;00043 <a class="code" href="class_string_source.html">StringSource</a>(key, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_string_sink_template.html">StringSink</a>(decodedKey)));00044 <a class="code" href="class_string_source.html">StringSource</a>(seed, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_string_sink_template.html">StringSink</a>(decodedSeed)));00045 00046 <a class="code" href="class_auto_seeded_x917_r_n_g.html">AutoSeededX917RNG<CIPHER></a> rng;00047 rng.<a class="code" href="class_auto_seeded_x917_r_n_g.html#_auto_seeded_x917_r_n_ga1">Reseed</a>((<span class="keyword">const</span> byte *)decodedKey.data(), decodedKey.size(), (<span class="keyword">const</span> byte *)decodedSeed.data(), deterministicTimeVector);00048 KnownAnswerTest(rng, output);00049 }00050 00051 <span class="keywordtype">void</span> KnownAnswerTest(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &encryption, <a class="code" href="class_stream_transformation.html">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)00052 {00053 <a class="code" href="class_equality_comparison_filter.html">EqualityComparisonFilter</a> comparison;00054 00055 <a class="code" href="class_string_source.html">StringSource</a>(plaintext, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_stream_transformation_filter.html">StreamTransformationFilter</a>(encryption, <span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>(comparison, <span class="stringliteral">"0"</span>), StreamTransformationFilter::NO_PADDING)));00056 <a class="code" href="class_string_source.html">StringSource</a>(ciphertext, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>(comparison, <span class="stringliteral">"1"</span>)));00057 00058 <a class="code" href="class_string_source.html">StringSource</a>(ciphertext, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_stream_transformation_filter.html">StreamTransformationFilter</a>(decryption, <span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>(comparison, <span class="stringliteral">"0"</span>), StreamTransformationFilter::NO_PADDING)));00059 <a class="code" href="class_string_source.html">StringSource</a>(plaintext, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>(comparison, <span class="stringliteral">"1"</span>)));00060 00061 comparison.<a class="code" href="class_equality_comparison_filter.html#_equality_comparison_filtera3">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"0"</span>);00062 comparison.<a class="code" href="class_equality_comparison_filter.html#_equality_comparison_filtera3">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"1"</span>);00063 }00064 00065 <span class="keyword">template</span> <<span class="keyword">class</span> CIPHER>00066 <span class="keywordtype">void</span> SymmetricEncryptionKnownAnswerTest(00067 <span class="keyword">const</span> <span class="keywordtype">char</span> *key, 00068 <span class="keyword">const</span> <span class="keywordtype">char</span> *hexIV, 00069 <span class="keyword">const</span> <span class="keywordtype">char</span> *plaintext, 00070 <span class="keyword">const</span> <span class="keywordtype">char</span> *ecb,00071 <span class="keyword">const</span> <span class="keywordtype">char</span> *cbc,00072 <span class="keyword">const</span> <span class="keywordtype">char</span> *cfb,00073 <span class="keyword">const</span> <span class="keywordtype">char</span> *ofb,00074 <span class="keyword">const</span> <span class="keywordtype">char</span> *ctr,00075 CIPHER *dummy = NULL)00076 {00077 std::string decodedKey;00078 <a class="code" href="class_string_source.html">StringSource</a>(key, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_string_sink_template.html">StringSink</a>(decodedKey)));00079 00080 <span class="keyword">typename</span> CIPHER::Encryption encryption((<span class="keyword">const</span> byte *)decodedKey.data(), decodedKey.size());00081 <span class="keyword">typename</span> CIPHER::Decryption decryption((<span class="keyword">const</span> byte *)decodedKey.data(), decodedKey.size());00082 00083 <a class="code" href="class_sec_block.html">SecByteBlock</a> iv(encryption.BlockSize());00084 <a class="code" href="class_string_source.html">StringSource</a>(hexIV, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_array_sink.html">ArraySink</a>(iv, iv.size())));00085 00086 <span class="keywordflow">if</span> (ecb)00087 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html">ECB_Mode_ExternalCipher::Encryption</a>(encryption).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html">ECB_Mode_ExternalCipher::Decryption</a>(decryption).Ref(), plaintext, ecb);00088 <span class="keywordflow">if</span> (cbc)00089 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html">CBC_Mode_ExternalCipher::Encryption</a>(encryption, iv).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html">CBC_Mode_ExternalCipher::Decryption</a>(decryption, iv).Ref(), plaintext, cbc);00090 <span class="keywordflow">if</span> (cfb)00091 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html">CFB_Mode_ExternalCipher::Encryption</a>(encryption, iv).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html">CFB_Mode_ExternalCipher::Decryption</a>(encryption, iv).Ref(), plaintext, cfb);00092 <span class="keywordflow">if</span> (ofb)00093 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html">OFB_Mode_ExternalCipher::Encryption</a>(encryption, iv).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html">OFB_Mode_ExternalCipher::Decryption</a>(encryption, iv).Ref(), plaintext, ofb);00094 <span class="keywordflow">if</span> (ctr)00095 KnownAnswerTest(<a class="code" href="class_cipher_mode_final_template___external_cipher.html">CTR_Mode_ExternalCipher::Encryption</a>(encryption, iv).Ref(), <a class="code" href="class_cipher_mode_final_template___external_cipher.html">CTR_Mode_ExternalCipher::Decryption</a>(encryption, iv).Ref(), plaintext, ctr);00096 }00097 00098 <span class="keywordtype">void</span> KnownAnswerTest(<a class="code" href="class_hash_transformation.html">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)00099 {00100 <a class="code" href="class_equality_comparison_filter.html">EqualityComparisonFilter</a> comparison;00101 <a class="code" href="class_string_source.html">StringSource</a>(digest, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>(comparison, <span class="stringliteral">"1"</span>)));00102 <a class="code" href="class_string_source.html">StringSource</a>(message, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hash_filter.html">HashFilter</a>(hash, <span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>(comparison, <span class="stringliteral">"0"</span>)));00103 00104 comparison.<a class="code" href="class_equality_comparison_filter.html#_equality_comparison_filtera3">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"0"</span>);00105 comparison.<a class="code" href="class_equality_comparison_filter.html#_equality_comparison_filtera3">ChannelMessageSeriesEnd</a>(<span class="stringliteral">"1"</span>);00106 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -