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

📄 wake_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++: wake.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>wake.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// wake.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 "wake.h"</span>00005 00006 <span class="preprocessor">#include "strciphr.cpp"</span>00007 00008 NAMESPACE_BEGIN(CryptoPP)00009 00010 <span class="keywordtype">void</span> WAKE_TestInstantiations()00011 {00012         <a class="code" href="struct_w_a_k_e___c_f_b.html">WAKE_CFB&lt;&gt;</a>::Encryption x1;00013         <a class="code" href="struct_w_a_k_e___c_f_b.html">WAKE_CFB&lt;&gt;</a>::Decryption x3;00014         <a class="code" href="struct_w_a_k_e___o_f_b.html">WAKE_OFB&lt;&gt;</a>::Encryption x2;00015         <a class="code" href="struct_w_a_k_e___o_f_b.html">WAKE_OFB&lt;&gt;</a>::Decryption x4;00016 }00017 00018 <span class="keyword">inline</span> word32 WAKE_Base::M(word32 x, word32 y)00019 {00020         word32 w = x+y;00021         <span class="keywordflow">return</span> (w&gt;&gt;8) ^ t[(byte)w];00022 }00023 00024 <span class="keywordtype">void</span> WAKE_Base::GenKey(word32 k0, word32 k1, word32 k2, word32 k3)00025 {00026         <span class="keywordtype">long</span> x, z;00027         <span class="keywordtype">int</span> p ;00028         <span class="keyword">static</span> <span class="keywordtype">long</span> tt[10]= {00029                 0x726a8f3bL,                                                             <span class="comment">// table</span>00030                 0xe69a3b5cL,00031                 0xd3c71fe5L,00032                 0xab3c73d2L,00033                 0x4d3a8eb3L,00034                 0x0396d6e8L,00035                 0x3d4c2f7aL,00036                 0x9ee27cf3L, } ;00037         t[0] = k0;00038         t[1] = k1;00039         t[2] = k2;00040         t[3] = k3;00041         <span class="keywordflow">for</span> (p=4 ; p&lt;256 ; p++)00042         {00043           x=t[p-4]+t[p-1] ;                                        <span class="comment">// fill t</span>00044           t[p]= (x&gt;&gt;3) ^ tt[byte(x&amp;7)] ;00045         }00046 00047         <span class="keywordflow">for</span> (p=0 ; p&lt;23 ; p++)00048                 t[p]+=t[p+89] ;                   <span class="comment">// mix first entries</span>00049         x=t[33] ; z=t[59] | 0x01000001L ;00050         z=z&amp;0xff7fffffL ;00051         <span class="keywordflow">for</span> (p=0 ; p&lt;256 ; p++) {               <span class="comment">//change top byte to</span>00052           x=(x&amp;0xff7fffffL)+z ;                  <span class="comment">// a permutation etc</span>00053           t[p]=(t[p] &amp; 0x00ffffffL) ^ x ; }00054 00055         t[256]=t[0] ;00056         byte y=byte(x);00057         <span class="keywordflow">for</span> (p=0 ; p&lt;256 ; p++) {         <span class="comment">// further change perm.</span>00058           t[p]=t[y=byte(t[p^y]^y)] ;  <span class="comment">// and other digits</span>00059           t[y]=t[p+1] ;  }00060 }00061 00062 <span class="keyword">template</span> &lt;<span class="keyword">class</span> B&gt;00063 <span class="keywordtype">void</span> WAKE_Policy&lt;B&gt;::CipherSetKey(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;params, <span class="keyword">const</span> byte *key, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00064 {00065         word32 k0, k1, k2, k3;00066         BlockGetAndPut&lt;word32, BigEndian, false&gt;::Get(key)(r3)(r4)(r5)(r6)(k0)(k1)(k2)(k3);00067         GenKey(k0, k1, k2, k3);00068 }00069 00070 <span class="comment">// CFB</span>00071 <span class="keyword">template</span> &lt;<span class="keyword">class</span> B&gt;00072 <span class="keywordtype">void</span> WAKE_Policy&lt;B&gt;::Iterate(byte *output, <span class="keyword">const</span> byte *input, CipherDir dir, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterationCount)00073 {00074         RegisterOutput&lt;B&gt; registerOutput(output, input, dir);00075 00076         <span class="keywordflow">while</span> (iterationCount--)00077         {00078                 r3 = M(r3, ConditionalByteReverse(B::ToEnum(), r6));00079                 r4 = M(r4, r3);00080                 r5 = M(r5, r4);00081                 r6 = M(r6, r5);00082                 registerOutput(r6);00083         }00084 }00085 00086 <span class="comment">// OFB</span>00087 <span class="keyword">template</span> &lt;<span class="keyword">class</span> B&gt;00088 <span class="keywordtype">void</span> WAKE_Policy&lt;B&gt;::OperateKeystream(KeystreamOperation operation, byte *output, <span class="keyword">const</span> byte *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterationCount)00089 {00090         KeystreamOutput&lt;B&gt; keystreamOperation(operation, output, input);00091 00092         <span class="keywordflow">while</span> (iterationCount--)00093         {00094                 keystreamOperation(r6);00095                 r3 = M(r3, r6);00096                 r4 = M(r4, r3);00097                 r5 = M(r5, r4);00098                 r6 = M(r6, r5);00099         }00100 }00101 <span class="comment">/*</span>00102 <span class="comment">template &lt;class B&gt;</span>00103 <span class="comment">void WAKE_ROFB_Policy&lt;B&gt;::Iterate(KeystreamOperation operation, byte *output, const byte *input, unsigned int iterationCount)</span>00104 <span class="comment">{</span>00105 <span class="comment">        KeystreamOutput&lt;B&gt; keystreamOperation(operation, output, input);</span>00106 <span class="comment"></span>00107 <span class="comment">        while (iterationCount--)</span>00108 <span class="comment">        {</span>00109 <span class="comment">                keystreamOperation(r6);</span>00110 <span class="comment">                r3 = M(r3, r6);</span>00111 <span class="comment">                r4 = M(r4, r3);</span>00112 <span class="comment">                r5 = M(r5, r4);</span>00113 <span class="comment">                r6 = M(r6, r5);</span>00114 <span class="comment">        }</span>00115 <span class="comment">}</span>00116 <span class="comment">*/</span>00117 <span class="keyword">template</span> <span class="keyword">class </span>WAKE_Policy&lt;BigEndian&gt;;00118 <span class="keyword">template</span> <span class="keyword">class </span>WAKE_Policy&lt;LittleEndian&gt;;00119 <span class="comment">//template class WAKE_ROFB_Policy&lt;BigEndian&gt;;</span>00120 <span class="comment">//template class WAKE_ROFB_Policy&lt;LittleEndian&gt;;</span>00121 00122 NAMESPACE_END</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:28 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 + -