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

📄 datatest_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00337"></a>00337                         xx.Pump(256); xx.Flush(<span class="keyword">false</span>);<a name="l00338"></a>00338                         std::cout &lt;&lt; <span class="stringliteral">"\n"</span>;<a name="l00339"></a>00339                         SignalTestFailure();<a name="l00340"></a>00340                 }<a name="l00341"></a>00341         }<a name="l00342"></a>00342         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (test == <span class="stringliteral">"Decrypt"</span>)<a name="l00343"></a>00343         {<a name="l00344"></a>00344         }<a name="l00345"></a>00345         <span class="keywordflow">else</span><a name="l00346"></a>00346         {<a name="l00347"></a>00347                 SignalTestError();<a name="l00348"></a>00348                 assert(<span class="keyword">false</span>);<a name="l00349"></a>00349         }<a name="l00350"></a>00350 }<a name="l00351"></a>00351 <a name="l00352"></a>00352 <span class="keywordtype">void</span> TestDigestOrMAC(TestData &amp;v, <span class="keywordtype">bool</span> testDigest)<a name="l00353"></a>00353 {<a name="l00354"></a>00354         std::string name = GetRequiredDatum(v, <span class="stringliteral">"Name"</span>);<a name="l00355"></a>00355         std::string test = GetRequiredDatum(v, <span class="stringliteral">"Test"</span>);<a name="l00356"></a>00356 <a name="l00357"></a>00357         <a class="code" href="classmember__ptr.html">member_ptr&lt;MessageAuthenticationCode&gt;</a> mac;<a name="l00358"></a>00358         <a class="code" href="classmember__ptr.html">member_ptr&lt;HashTransformation&gt;</a> hash;<a name="l00359"></a>00359         <a class="code" href="class_hash_transformation.html" title="interface for hash functions and data processing part of MACs">HashTransformation</a> *pHash = NULL;<a name="l00360"></a>00360 <a name="l00361"></a>00361         <a class="code" href="class_test_data_name_value_pairs.html">TestDataNameValuePairs</a> pairs(v);<a name="l00362"></a>00362 <a name="l00363"></a>00363         <span class="keywordflow">if</span> (testDigest)<a name="l00364"></a>00364         {<a name="l00365"></a>00365                 hash.<a class="code" href="classmember__ptr.html#0191c833924d93e9093b07bab31010fe">reset</a>(<a class="code" href="class_object_factory_registry.html" title="_">ObjectFactoryRegistry&lt;HashTransformation&gt;::Registry</a>().CreateObject(name.c_str()));<a name="l00366"></a>00366                 pHash = hash.<a class="code" href="classmember__ptr.html#2d10dec2a51691b589d56b71ec78e59a">get</a>();<a name="l00367"></a>00367         }<a name="l00368"></a>00368         <span class="keywordflow">else</span><a name="l00369"></a>00369         {<a name="l00370"></a>00370                 mac.<a class="code" href="classmember__ptr.html#0191c833924d93e9093b07bab31010fe">reset</a>(<a class="code" href="class_object_factory_registry.html" title="_">ObjectFactoryRegistry&lt;MessageAuthenticationCode&gt;::Registry</a>().CreateObject(name.c_str()));<a name="l00371"></a>00371                 pHash = mac.<a class="code" href="classmember__ptr.html#2d10dec2a51691b589d56b71ec78e59a">get</a>();<a name="l00372"></a>00372                 <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> iv;<a name="l00373"></a>00373                 <span class="keywordflow">if</span> (pairs.GetValue(<a class="code" href="namespace_name.html#9b6839240a8bdf1f5bcbebf1866f4733" title="const byte *">Name::IV</a>(), iv) &amp;&amp; iv.<a class="code" href="class_const_byte_array_parameter.html#b83dbf7e4d80c0304917a3cc1d3cf144">size</a>() != mac-&gt;IVSize())<a name="l00374"></a>00374                         SignalTestFailure();<a name="l00375"></a>00375                 std::string key = GetDecodedDatum(v, <span class="stringliteral">"Key"</span>);<a name="l00376"></a>00376                 mac-&gt;SetKey((<span class="keyword">const</span> byte *)key.c_str(), key.size(), pairs);<a name="l00377"></a>00377         }<a name="l00378"></a>00378 <a name="l00379"></a>00379         <span class="keywordflow">if</span> (test == <span class="stringliteral">"Verify"</span> || test == <span class="stringliteral">"VerifyTruncated"</span> || test == <span class="stringliteral">"NotVerify"</span>)<a name="l00380"></a>00380         {<a name="l00381"></a>00381                 <span class="keywordtype">int</span> digestSize = pHash-&gt;<a class="code" href="class_hash_transformation.html#41faf8b1293a6c72390cb0c8bd668097" title="size of the hash returned by Final()">DigestSize</a>();<a name="l00382"></a>00382                 <span class="keywordflow">if</span> (test == <span class="stringliteral">"VerifyTruncated"</span>)<a name="l00383"></a>00383                         digestSize = atoi(GetRequiredDatum(v, <span class="stringliteral">"TruncatedSize"</span>).c_str());<a name="l00384"></a>00384                 <a class="code" href="class_truncated_hash_template.html" title="construct new HashModule with smaller DigestSize() from existing one">TruncatedHashModule</a> thash(*pHash, digestSize);<a name="l00385"></a>00385                 <a class="code" href="class_hash_verification_filter.html" title="Filter Wrapper for HashTransformation.">HashVerificationFilter</a> verifierFilter(thash, NULL, <a class="code" href="class_hash_verification_filter.html#4e171785f3f9b00d0a10f4c2afa1cc703974fb63ec975408ce7ab672d99ee004">HashVerificationFilter::HASH_AT_BEGIN</a>);<a name="l00386"></a>00386                 PutDecodedDatumInto(v, <span class="stringliteral">"Digest"</span>, verifierFilter);<a name="l00387"></a>00387                 PutDecodedDatumInto(v, <span class="stringliteral">"Message"</span>, verifierFilter);<a name="l00388"></a>00388                 verifierFilter.MessageEnd();<a name="l00389"></a>00389                 <span class="keywordflow">if</span> (verifierFilter.GetLastResult() == (test == <span class="stringliteral">"NotVerify"</span>))<a name="l00390"></a>00390                         SignalTestFailure();<a name="l00391"></a>00391         }<a name="l00392"></a>00392         <span class="keywordflow">else</span><a name="l00393"></a>00393         {<a name="l00394"></a>00394                 SignalTestError();<a name="l00395"></a>00395                 assert(<span class="keyword">false</span>);<a name="l00396"></a>00396         }<a name="l00397"></a>00397 }<a name="l00398"></a>00398 <a name="l00399"></a>00399 <span class="keywordtype">bool</span> GetField(std::istream &amp;is, std::string &amp;name, std::string &amp;value)<a name="l00400"></a>00400 {<a name="l00401"></a>00401         name.resize(0);         <span class="comment">// GCC workaround: 2.95.3 doesn't have clear()</span><a name="l00402"></a>00402         is &gt;&gt; name;<a name="l00403"></a>00403         <span class="keywordflow">if</span> (name.empty())<a name="l00404"></a>00404                 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00405"></a>00405 <a name="l00406"></a>00406         <span class="keywordflow">if</span> (name[name.size()-1] != <span class="charliteral">':'</span>)<a name="l00407"></a>00407                 SignalTestError();<a name="l00408"></a>00408         name.erase(name.size()-1);<a name="l00409"></a>00409 <a name="l00410"></a>00410         <span class="keywordflow">while</span> (is.peek() == <span class="charliteral">' '</span>)<a name="l00411"></a>00411                 is.ignore(1);<a name="l00412"></a>00412 <a name="l00413"></a>00413         <span class="comment">// VC60 workaround: getline bug</span><a name="l00414"></a>00414         <span class="keywordtype">char</span> buffer[128];<a name="l00415"></a>00415         value.resize(0);        <span class="comment">// GCC workaround: 2.95.3 doesn't have clear()</span><a name="l00416"></a>00416         <span class="keywordtype">bool</span> continueLine;<a name="l00417"></a>00417 <a name="l00418"></a>00418         <span class="keywordflow">do</span><a name="l00419"></a>00419         {<a name="l00420"></a>00420                 <span class="keywordflow">do</span><a name="l00421"></a>00421                 {<a name="l00422"></a>00422                         is.get(buffer, <span class="keyword">sizeof</span>(buffer));<a name="l00423"></a>00423                         value += buffer;<a name="l00424"></a>00424                 }<a name="l00425"></a>00425                 <span class="keywordflow">while</span> (buffer[0] != 0);<a name="l00426"></a>00426                 is.clear();<a name="l00427"></a>00427                 is.ignore();<a name="l00428"></a>00428 <a name="l00429"></a>00429                 <span class="keywordflow">if</span> (!value.empty() &amp;&amp; value[value.size()-1] == <span class="charliteral">'\r'</span>)<a name="l00430"></a>00430                         value.resize(value.size()-1);<a name="l00431"></a>00431 <a name="l00432"></a>00432                 <span class="keywordflow">if</span> (!value.empty() &amp;&amp; value[value.size()-1] == <span class="charliteral">'\\'</span>)<a name="l00433"></a>00433                 {<a name="l00434"></a>00434                         value.resize(value.size()-1);<a name="l00435"></a>00435                         continueLine = <span class="keyword">true</span>;<a name="l00436"></a>00436                 }<a name="l00437"></a>00437                 <span class="keywordflow">else</span><a name="l00438"></a>00438                         continueLine = <span class="keyword">false</span>;<a name="l00439"></a>00439 <a name="l00440"></a>00440                 std::string::size_type i = value.find(<span class="charliteral">'#'</span>);<a name="l00441"></a>00441                 <span class="keywordflow">if</span> (i != std::string::npos)<a name="l00442"></a>00442                         value.erase(i);<a name="l00443"></a>00443         }<a name="l00444"></a>00444         <span class="keywordflow">while</span> (continueLine);<a name="l00445"></a>00445 <a name="l00446"></a>00446         <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00447"></a>00447 }<a name="l00448"></a>00448 <a name="l00449"></a>00449 <span class="keywordtype">void</span> OutputPair(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> &amp;v, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)<a name="l00450"></a>00450 {<a name="l00451"></a>00451         <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> x;<a name="l00452"></a>00452         <span class="keywordtype">bool</span> b = v.<a class="code" href="class_name_value_pairs.html#96686e9f8d6ce3ab870e516fb72b608e" title="get a named value, returns true if the name exists">GetValue</a>(name, x);<a name="l00453"></a>00453         assert(b);<a name="l00454"></a>00454         cout &lt;&lt; name &lt;&lt; <span class="stringliteral">": \\\n    "</span>;<a name="l00455"></a>00455         x.<a class="code" href="class_integer.html#c12ea467de9a609b86ec03d8cb8837e4" title="encode in big-endian format">Encode</a>(<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), <span class="keyword">false</span>, 64, <span class="stringliteral">"\\\n    "</span>).Ref(), x.<a class="code" href="class_integer.html#3b269bbf8a91faf217c0dd76222182bb" title="minimum number of bytes to encode this integer">MinEncodedSize</a>());

⌨️ 快捷键说明

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