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

📄 serpent_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!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&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>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 &lt;&lt; 3), 7);     \00014         b = rotlFixed(b ^ a ^ c, 1);    \00015         a = rotlFixed(a ^ b ^ d, 5);            \00016         c = rotlFixed(c ^ d ^ (b &lt;&lt; 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 &lt;&lt; 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 &lt;&lt; 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 &amp;= 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 &amp;= 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 &amp;= 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 &amp;= 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 &amp;= r4;   \</span>00115 <span class="preprocessor">    r0 ^= r1;   \</span>00116 <span class="preprocessor">    r1 &amp;= r2;   \</span>00117 <span class="preprocessor">    r1 ^= r0;   \</span>00118 <span class="preprocessor">    r0 &amp;= 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 &amp;= 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 &amp;= 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 &amp;= 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 &amp;= 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 &amp;= r3;   \</span>00175 <span class="preprocessor">    r2 ^= r3;   \</span>00176 <span class="preprocessor">    r4 &amp;= r0;   \</span>00177 <span class="preprocessor">    r4 ^= r2;   \</span>00178 <span class="preprocessor">    r2 &amp;= r1;   \</span>00179 <span class="preprocessor">    r2 |= r0;   \</span>

⌨️ 快捷键说明

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