📄 wake_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++: 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 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>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<></a>::Encryption x1;00013 <a class="code" href="struct_w_a_k_e___c_f_b.html">WAKE_CFB<></a>::Decryption x3;00014 <a class="code" href="struct_w_a_k_e___o_f_b.html">WAKE_OFB<></a>::Encryption x2;00015 <a class="code" href="struct_w_a_k_e___o_f_b.html">WAKE_OFB<></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>>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<256 ; p++)00042 {00043 x=t[p-4]+t[p-1] ; <span class="comment">// fill t</span>00044 t[p]= (x>>3) ^ tt[byte(x&7)] ;00045 }00046 00047 <span class="keywordflow">for</span> (p=0 ; p<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&0xff7fffffL ;00051 <span class="keywordflow">for</span> (p=0 ; p<256 ; p++) { <span class="comment">//change top byte to</span>00052 x=(x&0xff7fffffL)+z ; <span class="comment">// a permutation etc</span>00053 t[p]=(t[p] & 0x00ffffffL) ^ x ; }00054 00055 t[256]=t[0] ;00056 byte y=byte(x);00057 <span class="keywordflow">for</span> (p=0 ; p<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> <<span class="keyword">class</span> B>00063 <span class="keywordtype">void</span> WAKE_Policy<B>::CipherSetKey(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &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<word32, BigEndian, false>::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> <<span class="keyword">class</span> B>00072 <span class="keywordtype">void</span> WAKE_Policy<B>::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<B> 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> <<span class="keyword">class</span> B>00088 <span class="keywordtype">void</span> WAKE_Policy<B>::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<B> 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 <class B></span>00103 <span class="comment">void WAKE_ROFB_Policy<B>::Iterate(KeystreamOperation operation, byte *output, const byte *input, unsigned int iterationCount)</span>00104 <span class="comment">{</span>00105 <span class="comment"> KeystreamOutput<B> 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<BigEndian>;00118 <span class="keyword">template</span> <span class="keyword">class </span>WAKE_Policy<LittleEndian>;00119 <span class="comment">//template class WAKE_ROFB_Policy<BigEndian>;</span>00120 <span class="comment">//template class WAKE_ROFB_Policy<LittleEndian>;</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 + -