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

📄 datatest_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00099"></a>00099 {<a name="l00100"></a>00100         std::string s;<a name="l00101"></a>00101         PutDecodedDatumInto(data, name, <a class="code" href="class_string_sink_template.html" title="Append input to a string object.">StringSink</a>(s).Ref());<a name="l00102"></a>00102         <span class="keywordflow">return</span> s;<a name="l00103"></a>00103 }<a name="l00104"></a>00104 <a name="l00105"></a><a class="code" href="class_test_data_name_value_pairs.html">00105</a> <span class="keyword">class </span><a class="code" href="class_test_data_name_value_pairs.html">TestDataNameValuePairs</a> : <span class="keyword">public</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a><a name="l00106"></a>00106 {<a name="l00107"></a>00107 <span class="keyword">public</span>:<a name="l00108"></a><a class="code" href="class_test_data_name_value_pairs.html#459aa0aba013108089cb488fa80c71f0">00108</a>         <a class="code" href="class_test_data_name_value_pairs.html#459aa0aba013108089cb488fa80c71f0">TestDataNameValuePairs</a>(<span class="keyword">const</span> TestData &amp;data) : m_data(data) {}<a name="l00109"></a>00109 <a name="l00110"></a><a class="code" href="class_test_data_name_value_pairs.html#bee89a8a6315ce816f2f7da21091f351">00110</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="class_test_data_name_value_pairs.html#bee89a8a6315ce816f2f7da21091f351" title="to be implemented by derived classes, users should use one of the above functions...">GetVoidValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &amp;valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const</span><a name="l00111"></a>00111 <span class="keyword">        </span>{<a name="l00112"></a>00112                 TestData::const_iterator i = m_data.find(name);<a name="l00113"></a>00113                 <span class="keywordflow">if</span> (i == m_data.end())<a name="l00114"></a>00114                         <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00115"></a>00115                 <a name="l00116"></a>00116                 <span class="keyword">const</span> std::string &amp;value = i-&gt;second;<a name="l00117"></a>00117                 <a name="l00118"></a>00118                 <span class="keywordflow">if</span> (valueType == <span class="keyword">typeid</span>(<span class="keywordtype">int</span>))<a name="l00119"></a>00119                         *<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">int</span> *<span class="keyword">&gt;</span>(pValue) = atoi(value.c_str());<a name="l00120"></a>00120                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (valueType == <span class="keyword">typeid</span>(<a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a>))<a name="l00121"></a>00121                         *<span class="keyword">reinterpret_cast&lt;</span>Integer *<span class="keyword">&gt;</span>(pValue) = Integer((std::string(value) + <span class="stringliteral">"h"</span>).c_str());<a name="l00122"></a>00122                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (valueType == <span class="keyword">typeid</span>(<a class="code" href="class_const_byte_array_parameter.html" title="used to pass byte array input as part of a NameValuePairs object">ConstByteArrayParameter</a>))<a name="l00123"></a>00123                 {<a name="l00124"></a>00124                         m_temp.resize(0);<a name="l00125"></a>00125                         PutDecodedDatumInto(m_data, name, <a class="code" href="class_string_sink_template.html" title="Append input to a string object.">StringSink</a>(m_temp).Ref());<a name="l00126"></a>00126                         <span class="keyword">reinterpret_cast&lt;</span>ConstByteArrayParameter *<span class="keyword">&gt;</span>(pValue)-&gt;Assign((<span class="keyword">const</span> byte *)m_temp.data(), m_temp.size(), <span class="keyword">true</span>);<a name="l00127"></a>00127                 }<a name="l00128"></a>00128                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (valueType == <span class="keyword">typeid</span>(<span class="keyword">const</span> byte *))<a name="l00129"></a>00129                 {<a name="l00130"></a>00130                         m_temp.resize(0);<a name="l00131"></a>00131                         PutDecodedDatumInto(m_data, name, <a class="code" href="class_string_sink_template.html" title="Append input to a string object.">StringSink</a>(m_temp).Ref());<a name="l00132"></a>00132                         *<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>byte * *<span class="keyword">&gt;</span>(pValue) = (<span class="keyword">const</span> byte *)m_temp.data();<a name="l00133"></a>00133                 }<a name="l00134"></a>00134                 <span class="keywordflow">else</span><a name="l00135"></a>00135                         <span class="keywordflow">throw</span> ValueTypeMismatch(name, <span class="keyword">typeid</span>(std::string), valueType);<a name="l00136"></a>00136 <a name="l00137"></a>00137                 <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00138"></a>00138         }<a name="l00139"></a>00139 <a name="l00140"></a>00140 <span class="keyword">private</span>:<a name="l00141"></a>00141         <span class="keyword">const</span> TestData &amp;m_data;<a name="l00142"></a>00142         <span class="keyword">mutable</span> std::string m_temp;<a name="l00143"></a>00143 };<a name="l00144"></a>00144 <a name="l00145"></a>00145 <span class="keywordtype">void</span> TestKeyPairValidAndConsistent(<a class="code" href="class_crypto_material.html" title="interface for crypto material, such as public and private keys, and crypto parameters...">CryptoMaterial</a> &amp;pub, <span class="keyword">const</span> <a class="code" href="class_crypto_material.html" title="interface for crypto material, such as public and private keys, and crypto parameters...">CryptoMaterial</a> &amp;priv)<a name="l00146"></a>00146 {<a name="l00147"></a>00147         <span class="keywordflow">if</span> (!pub.<a class="code" href="class_crypto_material.html#439743c6b4e89ca8228a12fa1ea43ab1" title="check this object for errors">Validate</a>(GlobalRNG(), 3))<a name="l00148"></a>00148                 SignalTestFailure();<a name="l00149"></a>00149         <span class="keywordflow">if</span> (!priv.<a class="code" href="class_crypto_material.html#439743c6b4e89ca8228a12fa1ea43ab1" title="check this object for errors">Validate</a>(GlobalRNG(), 3))<a name="l00150"></a>00150                 SignalTestFailure();<a name="l00151"></a>00151 <a name="l00152"></a>00152 <span class="comment">/*      EqualityComparisonFilter comparison;</span><a name="l00153"></a>00153 <span class="comment">        pub.Save(ChannelSwitch(comparison, "0"));</span><a name="l00154"></a>00154 <span class="comment">        pub.AssignFrom(priv);</span><a name="l00155"></a>00155 <span class="comment">        pub.Save(ChannelSwitch(comparison, "1"));</span><a name="l00156"></a>00156 <span class="comment">        comparison.ChannelMessageSeriesEnd("0");</span><a name="l00157"></a>00157 <span class="comment">        comparison.ChannelMessageSeriesEnd("1");</span><a name="l00158"></a>00158 <span class="comment">*/</span><a name="l00159"></a>00159 }<a name="l00160"></a>00160 <a name="l00161"></a>00161 <span class="keywordtype">void</span> TestSignatureScheme(TestData &amp;v)<a name="l00162"></a>00162 {<a name="l00163"></a>00163         std::string name = GetRequiredDatum(v, <span class="stringliteral">"Name"</span>);<a name="l00164"></a>00164         std::string test = GetRequiredDatum(v, <span class="stringliteral">"Test"</span>);<a name="l00165"></a>00165 <a name="l00166"></a>00166         std::auto_ptr&lt;PK_Signer&gt; signer(<a class="code" href="class_object_factory_registry.html" title="_">ObjectFactoryRegistry&lt;PK_Signer&gt;::Registry</a>().CreateObject(name.c_str()));<a name="l00167"></a>00167         std::auto_ptr&lt;PK_Verifier&gt; verifier(<a class="code" href="class_object_factory_registry.html" title="_">ObjectFactoryRegistry&lt;PK_Verifier&gt;::Registry</a>().CreateObject(name.c_str()));<a name="l00168"></a>00168 <a name="l00169"></a>00169         <a class="code" href="class_test_data_name_value_pairs.html">TestDataNameValuePairs</a> pairs(v);<a name="l00170"></a>00170         std::string keyFormat = GetRequiredDatum(v, <span class="stringliteral">"KeyFormat"</span>);<a name="l00171"></a>00171 <a name="l00172"></a>00172         <span class="keywordflow">if</span> (keyFormat == <span class="stringliteral">"DER"</span>)<a name="l00173"></a>00173                 verifier-&gt;AccessMaterial().Load(<a class="code" href="class_string_store.html" title="string-based implementation of Store interface">StringStore</a>(GetDecodedDatum(v, <span class="stringliteral">"PublicKey"</span>)).Ref());<a name="l00174"></a>00174         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (keyFormat == <span class="stringliteral">"Component"</span>)<a name="l00175"></a>00175                 verifier-&gt;AccessMaterial().AssignFrom(pairs);<a name="l00176"></a>00176 <a name="l00177"></a>00177         <span class="keywordflow">if</span> (test == <span class="stringliteral">"Verify"</span> || test == <span class="stringliteral">"NotVerify"</span>)<a name="l00178"></a>00178         {<a name="l00179"></a>00179                 <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 name="l00180"></a>00180                 PutDecodedDatumInto(v, <span class="stringliteral">"Signature"</span>, verifierFilter);<a name="l00181"></a>00181                 PutDecodedDatumInto(v, <span class="stringliteral">"Message"</span>, verifierFilter);<a name="l00182"></a>00182                 verifierFilter.MessageEnd();<a name="l00183"></a>00183                 <span class="keywordflow">if</span> (verifierFilter.GetLastResult() == (test == <span class="stringliteral">"NotVerify"</span>))<a name="l00184"></a>00184                         SignalTestFailure();<a name="l00185"></a>00185         }<a name="l00186"></a>00186         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (test == <span class="stringliteral">"PublicKeyValid"</span>)<a name="l00187"></a>00187         {<a name="l00188"></a>00188                 <span class="keywordflow">if</span> (!verifier-&gt;GetMaterial().Validate(GlobalRNG(), 3))<a name="l00189"></a>00189                         SignalTestFailure();<a name="l00190"></a>00190         }<a name="l00191"></a>00191         <span class="keywordflow">else</span><a name="l00192"></a>00192                 <span class="keywordflow">goto</span> privateKeyTests;<a name="l00193"></a>00193 <a name="l00194"></a>00194         <span class="keywordflow">return</span>;<a name="l00195"></a>00195 <a name="l00196"></a>00196 privateKeyTests:<a name="l00197"></a>00197         <span class="keywordflow">if</span> (keyFormat == <span class="stringliteral">"DER"</span>)<a name="l00198"></a>00198                 signer-&gt;AccessMaterial().Load(<a class="code" href="class_string_store.html" title="string-based implementation of Store interface">StringStore</a>(GetDecodedDatum(v, <span class="stringliteral">"PrivateKey"</span>)).Ref());<a name="l00199"></a>00199         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (keyFormat == <span class="stringliteral">"Component"</span>)<a name="l00200"></a>00200                 signer-&gt;AccessMaterial().AssignFrom(pairs);<a name="l00201"></a>00201         <a name="l00202"></a>00202         <span class="keywordflow">if</span> (test == <span class="stringliteral">"KeyPairValidAndConsistent"</span>)<a name="l00203"></a>00203         {<a name="l00204"></a>00204                 TestKeyPairValidAndConsistent(verifier-&gt;AccessMaterial(), signer-&gt;GetMaterial());<a name="l00205"></a>00205         }<a name="l00206"></a>00206         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (test == <span class="stringliteral">"Sign"</span>)<a name="l00207"></a>00207         {<a name="l00208"></a>00208                 <a class="code" href="class_signer_filter.html" title="Filter Wrapper for PK_Signer.">SignerFilter</a> f(GlobalRNG(), *signer, <span class="keyword">new</span> <a class="code" href="class_hex_encoder.html" title="Converts given data to base 16.">HexEncoder</a>(<span class="keyword">new</span> <a class="code" href="class_file_sink.html" title="file-based implementation of Sink interface">FileSink</a>(cout)));<a name="l00209"></a>00209                 <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a> ss(GetDecodedDatum(v, <span class="stringliteral">"Message"</span>), <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>(f));<a name="l00210"></a>00210                 SignalTestFailure();<a name="l00211"></a>00211         }<a name="l00212"></a>00212         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (test == <span class="stringliteral">"DeterministicSign"</span>)<a name="l00213"></a>00213         {<a name="l00214"></a>00214                 SignalTestError();<a name="l00215"></a>00215                 assert(<span class="keyword">false</span>);  <span class="comment">// TODO: implement</span><a name="l00216"></a>00216         }<a name="l00217"></a>00217         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (test == <span class="stringliteral">"RandomSign"</span>)

⌨️ 快捷键说明

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