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

📄 tiger_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 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++: tiger.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>tiger.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// tiger.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 "tiger.h"</span>00005 <span class="preprocessor">#include "misc.h"</span>00006 00007 <span class="preprocessor">#ifdef WORD64_AVAILABLE</span>00008 <span class="preprocessor"></span>00009 NAMESPACE_BEGIN(CryptoPP)00010 00011 <span class="keywordtype">void</span> Tiger::Init()00012 {00013         m_digest[0] = W64LIT(0x0123456789ABCDEF);00014         m_digest[1] = W64LIT(0xFEDCBA9876543210);00015         m_digest[2] = W64LIT(0xF096A5B4C3B2E187);00016 }00017 <a name="l00018"></a><a class="code" href="class_tiger.html#_tigera1">00018</a> <span class="keywordtype">void</span> <a class="code" href="class_tiger.html#_tigera1">Tiger::TruncatedFinal</a>(byte *hash, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)00019 {00020         ThrowIfInvalidTruncatedSize(size);00021 00022         PadLastBlock(56, 0x01);00023         CorrectEndianess(m_data, m_data, 56);00024 00025         m_data[7] = GetBitCountLo();00026 00027         Transform(m_digest, m_data);00028         CorrectEndianess(m_digest, m_digest, <a class="code" href="class_hash_transformation.html#_x_m_a_c_ca9">DigestSize</a>());00029         memcpy(hash, m_digest, size);00030 00031         <a class="code" href="class_hash_transformation.html#_x_m_a_c_ca8">Restart</a>();              <span class="comment">// reinit for next use</span>00032 }00033 00034 <span class="preprocessor">#define t1 (table)</span>00035 <span class="preprocessor"></span><span class="preprocessor">#define t2 (table+256)</span>00036 <span class="preprocessor"></span><span class="preprocessor">#define t3 (table+256*2)</span>00037 <span class="preprocessor"></span><span class="preprocessor">#define t4 (table+256*3)</span>00038 <span class="preprocessor"></span>00039 <span class="preprocessor">#define round(a,b,c,x,mul) \</span>00040 <span class="preprocessor">        c ^= x; \</span>00041 <span class="preprocessor">        a -= t1[GETBYTE(c,0)] ^ t2[GETBYTE(c,2)] ^ t3[GETBYTE(c,4)] ^ t4[GETBYTE(c,6)]; \</span>00042 <span class="preprocessor">        b += t4[GETBYTE(c,1)] ^ t3[GETBYTE(c,3)] ^ t2[GETBYTE(c,5)] ^ t1[GETBYTE(c,7)]; \</span>00043 <span class="preprocessor">        b *= mul</span>00044 <span class="preprocessor"></span>00045 <span class="preprocessor">#define pass(a,b,c,mul,X) \</span>00046 <span class="preprocessor">        round(a,b,c,X[0],mul); \</span>00047 <span class="preprocessor">        round(b,c,a,X[1],mul); \</span>00048 <span class="preprocessor">        round(c,a,b,X[2],mul); \</span>00049 <span class="preprocessor">        round(a,b,c,X[3],mul); \</span>00050 <span class="preprocessor">        round(b,c,a,X[4],mul); \</span>00051 <span class="preprocessor">        round(c,a,b,X[5],mul); \</span>00052 <span class="preprocessor">        round(a,b,c,X[6],mul); \</span>00053 <span class="preprocessor">        round(b,c,a,X[7],mul)</span>00054 <span class="preprocessor"></span>00055 <span class="preprocessor">#define key_schedule(Y,X) \</span>00056 <span class="preprocessor">        Y[0] = X[0] - (X[7]^W64LIT(0xA5A5A5A5A5A5A5A5)); \</span>00057 <span class="preprocessor">        Y[1] = X[1] ^ Y[0]; \</span>00058 <span class="preprocessor">        Y[2] = X[2] + Y[1]; \</span>00059 <span class="preprocessor">        Y[3] = X[3] - (Y[2] ^ ((~Y[1])&lt;&lt;19)); \</span>00060 <span class="preprocessor">        Y[4] = X[4] ^ Y[3]; \</span>00061 <span class="preprocessor">        Y[5] = X[5] + Y[4]; \</span>00062 <span class="preprocessor">        Y[6] = X[6] - (Y[5] ^ ((~Y[4])&gt;&gt;23)); \</span>00063 <span class="preprocessor">        Y[7] = X[7] ^ Y[6]; \</span>00064 <span class="preprocessor">        Y[0] += Y[7]; \</span>00065 <span class="preprocessor">        Y[1] -= Y[0] ^ ((~Y[7])&lt;&lt;19); \</span>00066 <span class="preprocessor">        Y[2] ^= Y[1]; \</span>00067 <span class="preprocessor">        Y[3] += Y[2]; \</span>00068 <span class="preprocessor">        Y[4] -= Y[3] ^ ((~Y[2])&gt;&gt;23); \</span>00069 <span class="preprocessor">        Y[5] ^= Y[4]; \</span>00070 <span class="preprocessor">        Y[6] += Y[5]; \</span>00071 <span class="preprocessor">        Y[7] -= Y[6] ^ W64LIT(0x0123456789ABCDEF)</span>00072 <span class="preprocessor"></span>00073 <span class="keywordtype">void</span> Tiger::Transform (word64 *digest, <span class="keyword">const</span> word64 *X)00074 {00075         word64 a = digest[0];00076         word64 b = digest[1];00077         word64 c = digest[2];00078         word64 Y[8];00079 00080         pass(a,b,c,5,X);00081         key_schedule(Y,X);00082         pass(c,a,b,7,Y);00083         key_schedule(Y,Y);00084         pass(b,c,a,9,Y);00085 00086         digest[0] = a ^ digest[0];00087         digest[1] = b - digest[1];00088         digest[2] = c + digest[2];00089 00090         Y[0] = Y[1] = Y[2] = Y[3] = Y[4] = Y[5] = Y[6] = Y[7] = 0;00091 }00092 00093 NAMESPACE_END00094 00095 <span class="preprocessor">#endif  // WORD64_AVAILABLE</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:26 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

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