📄 serpent_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++: serpent.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>serpent.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// serpent.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 "<a class="code" href="serpent_8h.html">serpent.h</a>"</span>00005 <span class="preprocessor">#include "misc.h"</span>00006 00007 NAMESPACE_BEGIN(CryptoPP)00008 00009 <span class="comment">// linear transformation</span>00010 #define LT(i,a,b,c,d,e) {\00011 a = rotlFixed(a, 13); \00012 c = rotlFixed(c, 3); \00013 d = rotlFixed(d ^ c ^ (a << 3), 7); \00014 b = rotlFixed(b ^ a ^ c, 1); \00015 a = rotlFixed(a ^ b ^ d, 5); \00016 c = rotlFixed(c ^ d ^ (b << 7), 22);}00017 00018 <span class="comment">// inverse linear transformation</span>00019 <span class="preprocessor">#define ILT(i,a,b,c,d,e) {\</span>00020 <span class="preprocessor"> c = rotrFixed(c, 22); \</span>00021 <span class="preprocessor"> a = rotrFixed(a, 5); \</span>00022 <span class="preprocessor"> c ^= d ^ (b << 7); \</span>00023 <span class="preprocessor"> a ^= b ^ d; \</span>00024 <span class="preprocessor"> b = rotrFixed(b, 1); \</span>00025 <span class="preprocessor"> d = rotrFixed(d, 7) ^ c ^ (a << 3); \</span>00026 <span class="preprocessor"> b ^= a ^ c; \</span>00027 <span class="preprocessor"> c = rotrFixed(c, 3); \</span>00028 <span class="preprocessor"> a = rotrFixed(a, 13);}</span>00029 <span class="preprocessor"></span>00030 <span class="comment">// order of output from S-box functions</span>00031 <span class="preprocessor">#define beforeS0(f) f(0,a,b,c,d,e)</span>00032 <span class="preprocessor"></span><span class="preprocessor">#define afterS0(f) f(1,b,e,c,a,d)</span>00033 <span class="preprocessor"></span><span class="preprocessor">#define afterS1(f) f(2,c,b,a,e,d)</span>00034 <span class="preprocessor"></span><span class="preprocessor">#define afterS2(f) f(3,a,e,b,d,c)</span>00035 <span class="preprocessor"></span><span class="preprocessor">#define afterS3(f) f(4,e,b,d,c,a)</span>00036 <span class="preprocessor"></span><span class="preprocessor">#define afterS4(f) f(5,b,a,e,c,d)</span>00037 <span class="preprocessor"></span><span class="preprocessor">#define afterS5(f) f(6,a,c,b,e,d)</span>00038 <span class="preprocessor"></span><span class="preprocessor">#define afterS6(f) f(7,a,c,d,b,e)</span>00039 <span class="preprocessor"></span><span class="preprocessor">#define afterS7(f) f(8,d,e,b,a,c)</span>00040 <span class="preprocessor"></span>00041 <span class="comment">// order of output from inverse S-box functions</span>00042 <span class="preprocessor">#define beforeI7(f) f(8,a,b,c,d,e)</span>00043 <span class="preprocessor"></span><span class="preprocessor">#define afterI7(f) f(7,d,a,b,e,c)</span>00044 <span class="preprocessor"></span><span class="preprocessor">#define afterI6(f) f(6,a,b,c,e,d)</span>00045 <span class="preprocessor"></span><span class="preprocessor">#define afterI5(f) f(5,b,d,e,c,a)</span>00046 <span class="preprocessor"></span><span class="preprocessor">#define afterI4(f) f(4,b,c,e,a,d)</span>00047 <span class="preprocessor"></span><span class="preprocessor">#define afterI3(f) f(3,a,b,e,c,d)</span>00048 <span class="preprocessor"></span><span class="preprocessor">#define afterI2(f) f(2,b,d,e,c,a)</span>00049 <span class="preprocessor"></span><span class="preprocessor">#define afterI1(f) f(1,a,b,c,e,d)</span>00050 <span class="preprocessor"></span><span class="preprocessor">#define afterI0(f) f(0,a,d,b,e,c)</span>00051 <span class="preprocessor"></span>00052 <span class="comment">// The instruction sequences for the S-box functions </span>00053 <span class="comment">// come from Dag Arne Osvik's paper "Speeding up Serpent".</span>00054 00055 <span class="preprocessor">#define S0(i, r0, r1, r2, r3, r4) \</span>00056 <span class="preprocessor"> { \</span>00057 <span class="preprocessor"> r3 ^= r0; \</span>00058 <span class="preprocessor"> r4 = r1; \</span>00059 <span class="preprocessor"> r1 &= r3; \</span>00060 <span class="preprocessor"> r4 ^= r2; \</span>00061 <span class="preprocessor"> r1 ^= r0; \</span>00062 <span class="preprocessor"> r0 |= r3; \</span>00063 <span class="preprocessor"> r0 ^= r4; \</span>00064 <span class="preprocessor"> r4 ^= r3; \</span>00065 <span class="preprocessor"> r3 ^= r2; \</span>00066 <span class="preprocessor"> r2 |= r1; \</span>00067 <span class="preprocessor"> r2 ^= r4; \</span>00068 <span class="preprocessor"> r4 = ~r4; \</span>00069 <span class="preprocessor"> r4 |= r1; \</span>00070 <span class="preprocessor"> r1 ^= r3; \</span>00071 <span class="preprocessor"> r1 ^= r4; \</span>00072 <span class="preprocessor"> r3 |= r0; \</span>00073 <span class="preprocessor"> r1 ^= r3; \</span>00074 <span class="preprocessor"> r4 ^= r3; \</span>00075 <span class="preprocessor"> }</span>00076 <span class="preprocessor"></span>00077 <span class="preprocessor">#define I0(i, r0, r1, r2, r3, r4) \</span>00078 <span class="preprocessor"> { \</span>00079 <span class="preprocessor"> r2 = ~r2; \</span>00080 <span class="preprocessor"> r4 = r1; \</span>00081 <span class="preprocessor"> r1 |= r0; \</span>00082 <span class="preprocessor"> r4 = ~r4; \</span>00083 <span class="preprocessor"> r1 ^= r2; \</span>00084 <span class="preprocessor"> r2 |= r4; \</span>00085 <span class="preprocessor"> r1 ^= r3; \</span>00086 <span class="preprocessor"> r0 ^= r4; \</span>00087 <span class="preprocessor"> r2 ^= r0; \</span>00088 <span class="preprocessor"> r0 &= r3; \</span>00089 <span class="preprocessor"> r4 ^= r0; \</span>00090 <span class="preprocessor"> r0 |= r1; \</span>00091 <span class="preprocessor"> r0 ^= r2; \</span>00092 <span class="preprocessor"> r3 ^= r4; \</span>00093 <span class="preprocessor"> r2 ^= r1; \</span>00094 <span class="preprocessor"> r3 ^= r0; \</span>00095 <span class="preprocessor"> r3 ^= r1; \</span>00096 <span class="preprocessor"> r2 &= r3; \</span>00097 <span class="preprocessor"> r4 ^= r2; \</span>00098 <span class="preprocessor"> }</span>00099 <span class="preprocessor"></span>00100 <span class="preprocessor">#define S1(i, r0, r1, r2, r3, r4) \</span>00101 <span class="preprocessor"> { \</span>00102 <span class="preprocessor"> r0 = ~r0; \</span>00103 <span class="preprocessor"> r2 = ~r2; \</span>00104 <span class="preprocessor"> r4 = r0; \</span>00105 <span class="preprocessor"> r0 &= r1; \</span>00106 <span class="preprocessor"> r2 ^= r0; \</span>00107 <span class="preprocessor"> r0 |= r3; \</span>00108 <span class="preprocessor"> r3 ^= r2; \</span>00109 <span class="preprocessor"> r1 ^= r0; \</span>00110 <span class="preprocessor"> r0 ^= r4; \</span>00111 <span class="preprocessor"> r4 |= r1; \</span>00112 <span class="preprocessor"> r1 ^= r3; \</span>00113 <span class="preprocessor"> r2 |= r0; \</span>00114 <span class="preprocessor"> r2 &= r4; \</span>00115 <span class="preprocessor"> r0 ^= r1; \</span>00116 <span class="preprocessor"> r1 &= r2; \</span>00117 <span class="preprocessor"> r1 ^= r0; \</span>00118 <span class="preprocessor"> r0 &= r2; \</span>00119 <span class="preprocessor"> r0 ^= r4; \</span>00120 <span class="preprocessor"> }</span>00121 <span class="preprocessor"></span>00122 <span class="preprocessor">#define I1(i, r0, r1, r2, r3, r4) \</span>00123 <span class="preprocessor"> { \</span>00124 <span class="preprocessor"> r4 = r1; \</span>00125 <span class="preprocessor"> r1 ^= r3; \</span>00126 <span class="preprocessor"> r3 &= r1; \</span>00127 <span class="preprocessor"> r4 ^= r2; \</span>00128 <span class="preprocessor"> r3 ^= r0; \</span>00129 <span class="preprocessor"> r0 |= r1; \</span>00130 <span class="preprocessor"> r2 ^= r3; \</span>00131 <span class="preprocessor"> r0 ^= r4; \</span>00132 <span class="preprocessor"> r0 |= r2; \</span>00133 <span class="preprocessor"> r1 ^= r3; \</span>00134 <span class="preprocessor"> r0 ^= r1; \</span>00135 <span class="preprocessor"> r1 |= r3; \</span>00136 <span class="preprocessor"> r1 ^= r0; \</span>00137 <span class="preprocessor"> r4 = ~r4; \</span>00138 <span class="preprocessor"> r4 ^= r1; \</span>00139 <span class="preprocessor"> r1 |= r0; \</span>00140 <span class="preprocessor"> r1 ^= r0; \</span>00141 <span class="preprocessor"> r1 |= r4; \</span>00142 <span class="preprocessor"> r3 ^= r1; \</span>00143 <span class="preprocessor"> }</span>00144 <span class="preprocessor"></span>00145 <span class="preprocessor">#define S2(i, r0, r1, r2, r3, r4) \</span>00146 <span class="preprocessor"> { \</span>00147 <span class="preprocessor"> r4 = r0; \</span>00148 <span class="preprocessor"> r0 &= r2; \</span>00149 <span class="preprocessor"> r0 ^= r3; \</span>00150 <span class="preprocessor"> r2 ^= r1; \</span>00151 <span class="preprocessor"> r2 ^= r0; \</span>00152 <span class="preprocessor"> r3 |= r4; \</span>00153 <span class="preprocessor"> r3 ^= r1; \</span>00154 <span class="preprocessor"> r4 ^= r2; \</span>00155 <span class="preprocessor"> r1 = r3; \</span>00156 <span class="preprocessor"> r3 |= r4; \</span>00157 <span class="preprocessor"> r3 ^= r0; \</span>00158 <span class="preprocessor"> r0 &= r1; \</span>00159 <span class="preprocessor"> r4 ^= r0; \</span>00160 <span class="preprocessor"> r1 ^= r3; \</span>00161 <span class="preprocessor"> r1 ^= r4; \</span>00162 <span class="preprocessor"> r4 = ~r4; \</span>00163 <span class="preprocessor"> }</span>00164 <span class="preprocessor"></span>00165 <span class="preprocessor">#define I2(i, r0, r1, r2, r3, r4) \</span>00166 <span class="preprocessor"> { \</span>00167 <span class="preprocessor"> r2 ^= r3; \</span>00168 <span class="preprocessor"> r3 ^= r0; \</span>00169 <span class="preprocessor"> r4 = r3; \</span>00170 <span class="preprocessor"> r3 &= r2; \</span>00171 <span class="preprocessor"> r3 ^= r1; \</span>00172 <span class="preprocessor"> r1 |= r2; \</span>00173 <span class="preprocessor"> r1 ^= r4; \</span>00174 <span class="preprocessor"> r4 &= r3; \</span>00175 <span class="preprocessor"> r2 ^= r3; \</span>00176 <span class="preprocessor"> r4 &= r0; \</span>00177 <span class="preprocessor"> r4 ^= r2; \</span>00178 <span class="preprocessor"> r2 &= r1; \</span>00179 <span class="preprocessor"> r2 |= r0; \</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -