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

📄 modes_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00101                 memcpy(m_register, iv, <a class="code" href="namespace_name.html#a9">BlockSize</a>());00102                 TransformRegister();00103         }00104         <span class="keywordtype">void</span> SetFeedbackSize(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> feedbackSize)00105         {00106                 <span class="keywordflow">if</span> (feedbackSize &gt; <a class="code" href="namespace_name.html#a9">BlockSize</a>())00107                         <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"CFB_Mode: invalid feedback size"</span>);00108                 m_feedbackSize = feedbackSize ? feedbackSize : <a class="code" href="namespace_name.html#a9">BlockSize</a>();00109         }00110         <span class="keywordtype">void</span> ResizeBuffers()00111         {00112                 CipherModeBase::ResizeBuffers();00113                 m_temp.New(<a class="code" href="namespace_name.html#a9">BlockSize</a>());00114         }00115 00116         <a class="code" href="class_sec_block.html">SecByteBlock</a> m_temp;00117         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_feedbackSize;00118 };00119 00120 <span class="keyword">class </span>CRYPTOPP_DLL OFB_ModePolicy : <span class="keyword">public</span> ModePolicyCommonTemplate&lt;AdditiveCipherAbstractPolicy&gt;00121 {00122 <span class="keyword">public</span>:00123         <span class="keywordtype">bool</span> IsRandomAccess()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00124         IV_Requirement IVRequirement()<span class="keyword"> const </span>{<span class="keywordflow">return</span> STRUCTURED_IV;}00125 00126 <span class="keyword">private</span>:00127         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetBytesPerIteration()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="namespace_name.html#a9">BlockSize</a>();}00128         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetIterationsToBuffer()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 1;}00129         <span class="keywordtype">void</span> WriteKeystream(byte *keystreamBuffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterationCount)00130         {00131                 assert(iterationCount == 1);00132                 m_cipher-&gt;ProcessBlock(keystreamBuffer);00133                 memcpy(m_register, keystreamBuffer, <a class="code" href="namespace_name.html#a9">BlockSize</a>());00134         }00135         <span class="keywordtype">void</span> CipherResynchronize(byte *keystreamBuffer, <span class="keyword">const</span> byte *iv)00136         {00137                 memcpy(keystreamBuffer, iv, <a class="code" href="namespace_name.html#a9">BlockSize</a>());00138                 memcpy(m_register, keystreamBuffer, <a class="code" href="namespace_name.html#a9">BlockSize</a>());00139         }00140 };00141 00142 <span class="keyword">class </span>CRYPTOPP_DLL CTR_ModePolicy : <span class="keyword">public</span> ModePolicyCommonTemplate&lt;AdditiveCipherAbstractPolicy&gt;00143 {00144 <span class="keyword">public</span>:00145         <span class="keywordtype">bool</span> IsRandomAccess()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00146         IV_Requirement IVRequirement()<span class="keyword"> const </span>{<span class="keywordflow">return</span> STRUCTURED_IV;}00147         <span class="keywordtype">void</span> GetNextIV(byte *IV);00148 00149 <span class="keyword">private</span>:00150         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetBytesPerIteration()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="namespace_name.html#a9">BlockSize</a>();}00151         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetIterationsToBuffer()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_cipher-&gt;OptimalNumberOfParallelBlocks();}00152         <span class="keywordtype">void</span> WriteKeystream(byte *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterationCount)00153                 {OperateKeystream(WRITE_KEYSTREAM, buffer, NULL, iterationCount);}00154         <span class="keywordtype">bool</span> CanOperateKeystream()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00155         <span class="keywordtype">void</span> OperateKeystream(KeystreamOperation operation, byte *output, <span class="keyword">const</span> byte *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterationCount);00156         <span class="keywordtype">void</span> CipherResynchronize(byte *keystreamBuffer, <span class="keyword">const</span> byte *iv);00157         <span class="keywordtype">void</span> SeekToIteration(dword iterationCount);00158 00159         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> IncrementCounterByOne(byte *output, <span class="keyword">const</span> byte *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> s)00160         {00161                 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=s-1, carry=1; i&gt;=0 &amp;&amp; carry; i--)00162                 carry = !(output[i] = input[i]+1);00163         }00164         <span class="keyword">inline</span> <span class="keywordtype">void</span> ProcessMultipleBlocks(byte *output, <span class="keyword">const</span> byte *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n)00165         {00166                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> s = <a class="code" href="namespace_name.html#a9">BlockSize</a>(), j = 0;00167                 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=1; i&lt;n; i++, j+=s)00168                         IncrementCounterByOne(m_counterArray + j + s, m_counterArray + j, s);00169                 m_cipher-&gt;ProcessAndXorMultipleBlocks(m_counterArray, input, output, n);00170                 IncrementCounterByOne(m_counterArray, m_counterArray + s*(n-1), s);00171         }00172 00173         <a class="code" href="class_sec_block.html">SecByteBlock</a> m_counterArray;00174 };00175 00176 <span class="keyword">class </span>CRYPTOPP_DLL BlockOrientedCipherModeBase : <span class="keyword">public</span> CipherModeBase00177 {00178 <span class="keyword">public</span>:00179         <span class="keywordtype">void</span> UncheckedSetKey(<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);00180         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MandatoryBlockSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="namespace_name.html#a9">BlockSize</a>();}00181         <span class="keywordtype">bool</span> IsRandomAccess()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00182         <span class="keywordtype">bool</span> IsSelfInverting()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00183         <span class="keywordtype">bool</span> IsForwardTransformation()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_cipher-&gt;IsForwardTransformation();}00184         <span class="keywordtype">void</span> Resynchronize(<span class="keyword">const</span> byte *iv) {memcpy(m_register, iv, <a class="code" href="namespace_name.html#a9">BlockSize</a>());}00185         <span class="keywordtype">void</span> ProcessData(byte *outString, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length);00186 00187 <span class="keyword">protected</span>:00188         <span class="keywordtype">bool</span> RequireAlignedInput()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00189         <span class="keyword">virtual</span> <span class="keywordtype">void</span> ProcessBlocks(byte *outString, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberOfBlocks) =0;00190         <span class="keywordtype">void</span> ResizeBuffers()00191         {00192                 CipherModeBase::ResizeBuffers();00193                 m_buffer.New(<a class="code" href="namespace_name.html#a9">BlockSize</a>());00194         }00195 00196         <a class="code" href="class_sec_block.html">SecByteBlock</a> m_buffer;00197 };00198 00199 <span class="keyword">class </span>CRYPTOPP_DLL ECB_OneWay : <span class="keyword">public</span> BlockOrientedCipherModeBase00200 {00201 <span class="keyword">public</span>:00202         IV_Requirement IVRequirement()<span class="keyword"> const </span>{<span class="keywordflow">return</span> NOT_RESYNCHRONIZABLE;}00203         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> OptimalBlockSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="namespace_name.html#a9">BlockSize</a>() * m_cipher-&gt;OptimalNumberOfParallelBlocks();}00204         <span class="keywordtype">void</span> ProcessBlocks(byte *outString, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberOfBlocks)00205                 {m_cipher-&gt;ProcessAndXorMultipleBlocks(inString, NULL, outString, numberOfBlocks);}00206 };00207 

⌨️ 快捷键说明

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