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

📄 fipstest_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!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&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Compound&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Compound&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;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 &lt;windows.h&gt;</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> &amp;macSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;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> &amp;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> &lt;<span class="keyword">class</span> CIPHER&gt;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&lt;CIPHER&gt;</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> &amp;encryption, <a class="code" href="class_stream_transformation.html">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)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> &lt;<span class="keyword">class</span> CIPHER&gt;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> &amp;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 + -