📄 validat3_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++: validat3.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>validat3.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// validat3.cpp - written and placed in the public domain by Wei Dai</span>00002 00003 <span class="preprocessor">#include "pch.h"</span>00004 <span class="preprocessor">#include "validate.h"</span>00005 00006 <span class="preprocessor">#include "smartptr.h"</span>00007 <span class="preprocessor">#include "crc.h"</span>00008 <span class="preprocessor">#include "adler32.h"</span>00009 <span class="preprocessor">#include "md2.h"</span>00010 <span class="preprocessor">#include "md4.h"</span>00011 <span class="preprocessor">#include "md5.h"</span>00012 <span class="preprocessor">#include "sha.h"</span>00013 <span class="preprocessor">#include "tiger.h"</span>00014 <span class="preprocessor">#include "ripemd.h"</span>00015 <span class="preprocessor">#include "haval.h"</span>00016 <span class="preprocessor">#include "panama.h"</span>00017 00018 <span class="preprocessor">#include "<a class="code" href="md5mac_8h.html">md5mac.h</a>"</span>00019 <span class="preprocessor">#include "hmac.h"</span>00020 <span class="preprocessor">#include "xormac.h"</span>00021 00022 <span class="preprocessor">#include "<a class="code" href="integer_8h.html">integer.h</a>"</span>00023 <span class="preprocessor">#include "pwdbased.h"</span>00024 <span class="preprocessor">#include "filters.h"</span>00025 <span class="preprocessor">#include "hex.h"</span>00026 <span class="preprocessor">#include "files.h"</span>00027 00028 <span class="preprocessor">#include <iostream></span>00029 <span class="preprocessor">#include <iomanip></span>00030 00031 USING_NAMESPACE(CryptoPP)00032 USING_NAMESPACE(std)00033 00034 <span class="keyword">struct </span>HashTestTuple00035 {00036 HashTestTuple(<span class="keyword">const</span> <span class="keywordtype">char</span> *input, <span class="keyword">const</span> <span class="keywordtype">char</span> *output, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> repeatTimes=1)00037 : input((byte *)input), output((byte *)output), inputLen(strlen(input)), repeatTimes(repeatTimes) {}00038 00039 HashTestTuple(<span class="keyword">const</span> <span class="keywordtype">char</span> *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputLen, <span class="keyword">const</span> <span class="keywordtype">char</span> *output, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> repeatTimes)00040 : input((byte *)input), output((byte *)output), inputLen(inputLen), repeatTimes(repeatTimes) {}00041 00042 <span class="keyword">const</span> byte *input, *output;00043 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputLen, repeatTimes;00044 };00045 00046 <span class="keywordtype">bool</span> HashModuleTest(<a class="code" href="class_hash_transformation.html">HashTransformation</a> &md, <span class="keyword">const</span> HashTestTuple *testSet, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> testSetSize)00047 {00048 <span class="keywordtype">bool</span> pass=<span class="keyword">true</span>, fail;00049 <a class="code" href="class_sec_block.html">SecByteBlock</a> digest(md.<a class="code" href="class_hash_transformation.html#_x_m_a_c_ca9">DigestSize</a>());00050 00051 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<testSetSize; i++)00052 {00053 <span class="keywordtype">unsigned</span> j;00054 00055 <span class="keywordflow">for</span> (j=0; j<testSet[i].repeatTimes; j++)00056 md.<a class="code" href="class_hash_transformation.html#_x_m_a_c_ca5">Update</a>(testSet[i].input, testSet[i].inputLen);00057 md.<a class="code" href="class_hash_transformation.html#_x_m_a_c_c___basea13">Final</a>(digest);00058 fail = memcmp(digest, testSet[i].output, md.<a class="code" href="class_hash_transformation.html#_x_m_a_c_ca9">DigestSize</a>()) != 0;00059 pass = pass && !fail;00060 00061 cout << (fail ? <span class="stringliteral">"FAILED "</span> : <span class="stringliteral">"passed "</span>);00062 <span class="keywordflow">for</span> (j=0; j<md.<a class="code" href="class_hash_transformation.html#_x_m_a_c_ca9">DigestSize</a>(); j++)00063 cout << setw(2) << setfill(<span class="charliteral">'0'</span>) << hex << (<span class="keywordtype">int</span>)digest[j];00064 cout << <span class="stringliteral">" \""</span> << (<span class="keywordtype">char</span> *)testSet[i].input << <span class="charliteral">'\"'</span>;00065 <span class="keywordflow">if</span> (testSet[i].repeatTimes != 1)00066 cout << <span class="stringliteral">" repeated "</span> << dec << testSet[i].repeatTimes << <span class="stringliteral">" times"</span>;00067 cout << endl;00068 }00069 00070 <span class="keywordflow">return</span> pass;00071 }00072 00073 <span class="keywordtype">bool</span> ValidateCRC32()00074 {00075 HashTestTuple testSet[] = 00076 {00077 HashTestTuple(<span class="stringliteral">""</span>, <span class="stringliteral">"\x00\x00\x00\x00"</span>),00078 HashTestTuple(<span class="stringliteral">"a"</span>, <span class="stringliteral">"\x43\xbe\xb7\xe8"</span>),00079 HashTestTuple(<span class="stringliteral">"abc"</span>, <span class="stringliteral">"\xc2\x41\x24\x35"</span>),00080 HashTestTuple(<span class="stringliteral">"message digest"</span>, <span class="stringliteral">"\x7f\x9d\x15\x20"</span>),00081 HashTestTuple(<span class="stringliteral">"abcdefghijklmnopqrstuvwxyz"</span>, <span class="stringliteral">"\xbd\x50\x27\x4c"</span>),00082 HashTestTuple(<span class="stringliteral">"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"</span>, <span class="stringliteral">"\xd2\xe6\xc2\x1f"</span>),00083 HashTestTuple(<span class="stringliteral">"12345678901234567890123456789012345678901234567890123456789012345678901234567890"</span>, <span class="stringliteral">"\x72\x4a\xa9\x7c"</span>),00084 HashTestTuple(<span class="stringliteral">"123456789"</span>, <span class="stringliteral">"\x26\x39\xf4\xcb"</span>)00085 };00086 00087 <a class="code" href="class_c_r_c32.html">CRC32</a> crc;00088 00089 cout << <span class="stringliteral">"\nCRC-32 validation suite running...\n\n"</span>;00090 <span class="keywordflow">return</span> HashModuleTest(crc, testSet, <span class="keyword">sizeof</span>(testSet)/<span class="keyword">sizeof</span>(testSet[0]));00091 }00092 00093 <span class="keywordtype">bool</span> ValidateAdler32()00094 {00095 HashTestTuple testSet[] = 00096 {00097 HashTestTuple(<span class="stringliteral">""</span>, <span class="stringliteral">"\x00\x00\x00\x01"</span>),00098 HashTestTuple(<span class="stringliteral">"a"</span>, <span class="stringliteral">"\x00\x62\x00\x62"</span>),00099 HashTestTuple(<span class="stringliteral">"abc"</span>, <span class="stringliteral">"\x02\x4d\x01\x27"</span>),00100 HashTestTuple(<span class="stringliteral">"message digest"</span>, <span class="stringliteral">"\x29\x75\x05\x86"</span>),00101 HashTestTuple(<span class="stringliteral">"abcdefghijklmnopqrstuvwxyz"</span>, <span class="stringliteral">"\x90\x86\x0b\x20"</span>),00102 HashTestTuple(<span class="stringliteral">"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"</span>, <span class="stringliteral">"\x8a\xdb\x15\x0c"</span>),00103 HashTestTuple(<span class="stringliteral">"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"</span>, <span class="stringliteral">"\x15\xd8\x70\xf9"</span>, 15625)00104 };00105 00106 <a class="code" href="class_adler32.html">Adler32</a> md;00107 00108 cout << <span class="stringliteral">"\nAdler-32 validation suite running...\n\n"</span>;00109 <span class="keywordflow">return</span> HashModuleTest(md, testSet, <span class="keyword">sizeof</span>(testSet)/<span class="keyword">sizeof</span>(testSet[0]));00110 }00111 00112 <span class="keywordtype">bool</span> ValidateMD2()00113 {00114 HashTestTuple testSet[] = 00115 {00116 HashTestTuple(<span class="stringliteral">""</span>, <span class="stringliteral">"\x83\x50\xe5\xa3\xe2\x4c\x15\x3d\xf2\x27\x5c\x9f\x80\x69\x27\x73"</span>),00117 HashTestTuple(<span class="stringliteral">"a"</span>, <span class="stringliteral">"\x32\xec\x01\xec\x4a\x6d\xac\x72\xc0\xab\x96\xfb\x34\xc0\xb5\xd1"</span>),00118 HashTestTuple(<span class="stringliteral">"abc"</span>, <span class="stringliteral">"\xda\x85\x3b\x0d\x3f\x88\xd9\x9b\x30\x28\x3a\x69\xe6\xde\xd6\xbb"</span>),00119 HashTestTuple(<span class="stringliteral">"message digest"</span>, <span class="stringliteral">"\xab\x4f\x49\x6b\xfb\x2a\x53\x0b\x21\x9f\xf3\x30\x31\xfe\x06\xb0"</span>),00120 HashTestTuple(<span class="stringliteral">"abcdefghijklmnopqrstuvwxyz"</span>, <span class="stringliteral">"\x4e\x8d\xdf\xf3\x65\x02\x92\xab\x5a\x41\x08\xc3\xaa\x47\x94\x0b"</span>),00121 HashTestTuple(<span class="stringliteral">"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"</span>, <span class="stringliteral">"\xda\x33\xde\xf2\xa4\x2d\xf1\x39\x75\x35\x28\x46\xc3\x03\x38\xcd"</span>),00122 HashTestTuple(<span class="stringliteral">"12345678901234567890123456789012345678901234567890123456789012345678901234567890"</span>, <span class="stringliteral">"\xd5\x97\x6f\x79\xd8\x3d\x3a\x0d\xc9\x80\x6c\x3c\x66\xf3\xef\xd8"</span>)00123 };00124 00125 <a class="code" href="class_m_d2.html">MD2</a> md2;00126 00127 cout << <span class="stringliteral">"\nMD2 validation suite running...\n\n"</span>;00128 <span class="keywordflow">return</span> HashModuleTest(md2, testSet, <span class="keyword">sizeof</span>(testSet)/<span class="keyword">sizeof</span>(testSet[0]));00129 }00130 00131 <span class="keywordtype">bool</span> ValidateMD4()00132 {00133 HashTestTuple testSet[] = 00134 {00135 HashTestTuple(<span class="stringliteral">""</span>, <span class="stringliteral">"\x31\xd6\xcf\xe0\xd1\x6a\xe9\x31\xb7\x3c\x59\xd7\xe0\xc0\x89\xc0"</span>),00136 HashTestTuple(<span class="stringliteral">"a"</span>, <span class="stringliteral">"\xbd\xe5\x2c\xb3\x1d\xe3\x3e\x46\x24\x5e\x05\xfb\xdb\xd6\xfb\x24"</span>),00137 HashTestTuple(<span class="stringliteral">"abc"</span>, <span class="stringliteral">"\xa4\x48\x01\x7a\xaf\x21\xd8\x52\x5f\xc1\x0a\xe8\x7a\xa6\x72\x9d"</span>),00138 HashTestTuple(<span class="stringliteral">"message digest"</span>, <span class="stringliteral">"\xd9\x13\x0a\x81\x64\x54\x9f\xe8\x18\x87\x48\x06\xe1\xc7\x01\x4b"</span>),00139 HashTestTuple(<span class="stringliteral">"abcdefghijklmnopqrstuvwxyz"</span>, <span class="stringliteral">"\xd7\x9e\x1c\x30\x8a\xa5\xbb\xcd\xee\xa8\xed\x63\xdf\x41\x2d\xa9"</span>),00140 HashTestTuple(<span class="stringliteral">"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"</span>, <span class="stringliteral">"\x04\x3f\x85\x82\xf2\x41\xdb\x35\x1c\xe6\x27\xe1\x53\xe7\xf0\xe4"</span>),00141 HashTestTuple(<span class="stringliteral">"12345678901234567890123456789012345678901234567890123456789012345678901234567890"</span>, <span class="stringliteral">"\xe3\x3b\x4d\xdc\x9c\x38\xf2\x19\x9c\x3e\x7b\x16\x4f\xcc\x05\x36"</span>)00142 };00143 00144 <a class="code" href="class_m_d4.html">MD4</a> md4;00145 00146 cout << <span class="stringliteral">"\nMD4 validation suite running...\n\n"</span>;00147 <span class="keywordflow">return</span> HashModuleTest(md4, testSet, <span class="keyword">sizeof</span>(testSet)/<span class="keyword">sizeof</span>(testSet[0]));00148 }00149 00150 <span class="keywordtype">bool</span> ValidateMD5()00151 {00152 HashTestTuple testSet[] = 00153 {00154 HashTestTuple(<span class="stringliteral">""</span>, <span class="stringliteral">"\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\x09\x98\xec\xf8\x42\x7e"</span>),00155 HashTestTuple(<span class="stringliteral">"a"</span>, <span class="stringliteral">"\x0c\xc1\x75\xb9\xc0\xf1\xb6\xa8\x31\xc3\x99\xe2\x69\x77\x26\x61"</span>),00156 HashTestTuple(<span class="stringliteral">"abc"</span>, <span class="stringliteral">"\x90\x01\x50\x98\x3c\xd2\x4f\xb0\xd6\x96\x3f\x7d\x28\xe1\x7f\x72"</span>),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -