📄 modes_8h-source.html
字号:
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 > <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<AdditiveCipherAbstractPolicy>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->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<AdditiveCipherAbstractPolicy>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->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>=0 && 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<n; i++, j+=s)00168 IncrementCounterByOne(m_counterArray + j + s, m_counterArray + j, s);00169 m_cipher->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> &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->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->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->ProcessAndXorMultipleBlocks(inString, NULL, outString, numberOfBlocks);}00206 };00207
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -