strciphr_8h-source.html
来自「Crypto++是一个非常强大的密码学库,主要是功能全」· HTML 代码 · 共 312 行 · 第 1/2 页
HTML
312 行
00150 CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate<>;00151 00152 <span class="keyword">class </span>CRYPTOPP_DLL CFB_CipherAbstractPolicy00153 {00154 <span class="keyword">public</span>:00155 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetAlignment() <span class="keyword">const</span> =0;00156 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetBytesPerIteration() <span class="keyword">const</span> =0;00157 <span class="keyword">virtual</span> byte * GetRegisterBegin() =0;00158 <span class="keyword">virtual</span> <span class="keywordtype">void</span> TransformRegister() =0;00159 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> CanIterate()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00160 <span class="keyword">virtual</span> <span class="keywordtype">void</span> Iterate(byte *output, <span class="keyword">const</span> byte *input, CipherDir dir, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterationCount) {assert(<span class="keyword">false</span>);}00161 <span class="keyword">virtual</span> <span class="keywordtype">void</span> 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) =0;00162 <span class="keyword">virtual</span> <span class="keywordtype">void</span> CipherResynchronize(<span class="keyword">const</span> byte *iv) {<span class="keywordflow">throw</span> <a class="code" href="class_not_implemented.html">NotImplemented</a>(<span class="stringliteral">"StreamTransformation: this object doesn't support resynchronization"</span>);}00163 };00164 00165 <span class="keyword">template</span> <<span class="keyword">typename</span> WT, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> W, <span class="keyword">class</span> BASE = CFB_CipherAbstractPolicy>00166 <span class="keyword">struct </span>CFB_CipherConcretePolicy : <span class="keyword">public</span> BASE00167 {00168 <span class="keyword">typedef</span> WT WordType;00169 00170 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetAlignment()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">sizeof</span>(WordType);}00171 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetBytesPerIteration()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">sizeof</span>(WordType) * W;}00172 <span class="keywordtype">bool</span> CanIterate()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00173 <span class="keywordtype">void</span> TransformRegister() {Iterate(NULL, NULL, ENCRYPTION, 1);}00174 00175 <span class="keyword">template</span> <<span class="keyword">class</span> B>00176 <span class="keyword">struct </span>RegisterOutput00177 {00178 RegisterOutput(byte *output, <span class="keyword">const</span> byte *input, CipherDir dir)00179 : m_output(output), m_input(input), m_dir(dir) {}00180 00181 <span class="keyword">inline</span> RegisterOutput& operator()(WordType &registerWord)00182 {00183 assert(IsAligned<WordType>(m_output));00184 assert(IsAligned<WordType>(m_input));00185 00186 <span class="keywordflow">if</span> (!NativeByteOrderIs(B::ToEnum()))00187 registerWord = ByteReverse(registerWord);00188 00189 <span class="keywordflow">if</span> (m_dir == ENCRYPTION)00190 {00191 WordType ct = *(<span class="keyword">const</span> WordType *)m_input ^ registerWord;00192 registerWord = ct;00193 *(WordType*)m_output = ct;00194 m_input += <span class="keyword">sizeof</span>(WordType);00195 m_output += <span class="keyword">sizeof</span>(WordType);00196 }00197 <span class="keywordflow">else</span>00198 {00199 WordType ct = *(<span class="keyword">const</span> WordType *)m_input;00200 *(WordType*)m_output = registerWord ^ ct;00201 registerWord = ct;00202 m_input += <span class="keyword">sizeof</span>(WordType);00203 m_output += <span class="keyword">sizeof</span>(WordType);00204 }00205 00206 <span class="comment">// registerWord is left unreversed so it can be xor-ed with further input</span>00207 00208 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00209 }00210 00211 byte *m_output;00212 <span class="keyword">const</span> byte *m_input;00213 <a class="code" href="cryptlib_8h.html#a11">CipherDir</a> m_dir;00214 };00215 };00216 00217 <span class="keyword">template</span> <<span class="keyword">class</span> BASE>00218 <span class="keyword">class </span>CFB_CipherTemplate : <span class="keyword">public</span> BASE00219 {00220 <span class="keyword">public</span>:00221 <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);00222 <span class="keywordtype">void</span> Resynchronize(<span class="keyword">const</span> byte *iv);00223 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> OptimalBlockSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetPolicy().GetBytesPerIteration();}00224 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetOptimalNextBlockSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_leftOver;}00225 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> OptimalDataAlignment()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetPolicy().GetAlignment();}00226 <span class="keywordtype">bool</span> IsRandomAccess()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00227 <span class="keywordtype">bool</span> IsSelfInverting()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00228 00229 <span class="keyword">typedef</span> <span class="keyword">typename</span> BASE::PolicyInterface PolicyInterface;00230 00231 <span class="keyword">protected</span>:00232 <span class="keyword">virtual</span> <span class="keywordtype">void</span> CombineMessageAndShiftRegister(byte *output, byte *reg, <span class="keyword">const</span> byte *message, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length) =0;00233 00234 <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);00235 00236 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_leftOver;00237 };00238 00239 <span class="keyword">template</span> <<span class="keyword">class</span> BASE = AbstractPolicyHolder<CFB_CipherAbstractPolicy, SymmetricCipher> >00240 <span class="keyword">class </span>CFB_EncryptionTemplate : <span class="keyword">public</span> CFB_CipherTemplate<BASE>00241 {00242 <span class="keywordtype">bool</span> IsForwardTransformation()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00243 <span class="keywordtype">void</span> CombineMessageAndShiftRegister(byte *output, byte *reg, <span class="keyword">const</span> byte *message, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length);00244 };00245 00246 <span class="keyword">template</span> <<span class="keyword">class</span> BASE = AbstractPolicyHolder<CFB_CipherAbstractPolicy, SymmetricCipher> >00247 <span class="keyword">class </span>CFB_DecryptionTemplate : <span class="keyword">public</span> CFB_CipherTemplate<BASE>00248 {00249 <span class="keywordtype">bool</span> IsForwardTransformation()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00250 <span class="keywordtype">void</span> CombineMessageAndShiftRegister(byte *output, byte *reg, <span class="keyword">const</span> byte *message, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length);00251 };00252 00253 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractPolicyHolder<CFB_CipherAbstractPolicy, SymmetricCipher>;00254 CRYPTOPP_DLL_TEMPLATE_CLASS CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, SymmetricCipher> >;00255 CRYPTOPP_DLL_TEMPLATE_CLASS CFB_EncryptionTemplate<>;00256 CRYPTOPP_DLL_TEMPLATE_CLASS CFB_DecryptionTemplate<>;00257 00258 <span class="keyword">template</span> <<span class="keyword">class</span> BASE, <span class="keyword">class</span> INFO = BASE>00259 <span class="keyword">class </span>SymmetricCipherFinalTemplate : <span class="keyword">public</span> AlgorithmImpl<SimpleKeyingInterfaceImpl<BASE, INFO>, INFO>00260 {00261 <span class="keyword">public</span>:00262 SymmetricCipherFinalTemplate() {}00263 SymmetricCipherFinalTemplate(<span class="keyword">const</span> byte *key)00264 {SetKey(key, DEFAULT_KEYLENGTH);}00265 SymmetricCipherFinalTemplate(<span class="keyword">const</span> byte *key, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00266 {SetKey(key, length);}00267 SymmetricCipherFinalTemplate(<span class="keyword">const</span> byte *key, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keyword">const</span> byte *iv)00268 {SetKey(key, length); Resynchronize(iv);}00269 00270 <span class="keywordtype">void</span> SetKey(<span class="keyword">const</span> byte *key, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &params = g_nullNameValuePairs)00271 {00272 ThrowIfInvalidKeyLength(length);00273 UncheckedSetKey(params, key, length);00274 }00275 00276 <a class="code" href="class_clonable.html">Clonable</a> * Clone() {<span class="keywordflow">return</span> <span class="keyword">new</span> SymmetricCipherFinalTemplate<BASE, INFO>(*this);}00277 };00278 00279 <span class="keyword">template</span> <<span class="keyword">class</span> S>00280 <span class="keywordtype">void</span> AdditiveCipherTemplate<S>::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)00281 {00282 PolicyInterface &policy = AccessPolicy();00283 policy.CipherSetKey(params, key, length);00284 m_buffer.New(GetBufferByteSize(policy));00285 m_leftOver = 0;00286 }00287 00288 <span class="keyword">template</span> <<span class="keyword">class</span> BASE>00289 <span class="keywordtype">void</span> CFB_CipherTemplate<BASE>::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)00290 {00291 PolicyInterface &policy = AccessPolicy();00292 policy.CipherSetKey(params, key, length);00293 m_leftOver = policy.GetBytesPerIteration();00294 }00295 00296 NAMESPACE_END00297 00298 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:26 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 + =
减小字号Ctrl + -
显示快捷键?