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

📄 filters_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 5 页
字号:
00318                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = RoundDownToMultipleOf(newLength - m_lastSize, m_blockSize);00319                                         NextPutMaybeModifiable(inString, len, modifiable);00320                                         inString += len;00321                                         newLength -= len;00322                                 }00323                         }00324                 }00325 00326                 m_queue.Put(inString, newLength - m_queue.CurrentSize());00327         }00328 00329         <span class="keywordflow">if</span> (messageEnd)00330         {00331                 <span class="keywordflow">if</span> (!m_firstInputDone &amp;&amp; m_firstSize==0)00332                         FirstPut(NULL);00333 00334                 <a class="code" href="class_sec_block.html">SecByteBlock</a> temp(m_queue.CurrentSize());00335                 m_queue.GetAll(temp);00336                 LastPut(temp, temp.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00337 00338                 m_firstInputDone = <span class="keyword">false</span>;00339                 m_queue.ResetQueue(1, m_firstSize);00340 00341                 Output(1, NULL, 0, messageEnd, blocking);00342         }00343         <span class="keywordflow">return</span> 0;00344 }00345 <a name="l00346"></a><a class="code" href="class_filter_with_buffered_input.html#_stream_transformation_filtera9">00346</a> <span class="keywordtype">void</span> <a class="code" href="class_filter_with_buffered_input.html#_stream_transformation_filtera9">FilterWithBufferedInput::ForceNextPut</a>()00347 {00348         <span class="keywordflow">if</span> (!m_firstInputDone)00349                 <span class="keywordflow">return</span>;00350         00351         <span class="keywordflow">if</span> (m_blockSize &gt; 1)00352         {00353                 <span class="keywordflow">while</span> (m_queue.CurrentSize() &gt;= m_blockSize)00354                         NextPutModifiable(m_queue.GetBlock(), m_blockSize);00355         }00356         <span class="keywordflow">else</span>00357         {00358                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len;00359                 <span class="keywordflow">while</span> ((len = m_queue.CurrentSize()) &gt; 0)00360                         NextPutModifiable(m_queue.GetContigousBlocks(len), len);00361         }00362 }00363 00364 <span class="keywordtype">void</span> FilterWithBufferedInput::NextPutMultiple(<span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00365 {00366         assert(m_blockSize &gt; 1);        <span class="comment">// m_blockSize = 1 should always override this function</span>00367         <span class="keywordflow">while</span> (length &gt; 0)00368         {00369                 assert(length &gt;= m_blockSize);00370                 NextPutSingle(inString);00371                 inString += m_blockSize;00372                 length -= m_blockSize;00373         }00374 }00375 00376 <span class="comment">// *************************************************************</span>00377 00378 <span class="keywordtype">void</span> Redirector::ChannelInitialize(<span class="keyword">const</span> std::string &amp;channel, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters, <span class="keywordtype">int</span> propagation)00379 {00380         <span class="keywordflow">if</span> (channel.empty())00381         {00382                 m_target = parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="stringliteral">"RedirectionTargetPointer"</span>, (<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a>*)NULL);00383                 m_passSignal = parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="stringliteral">"PassSignal"</span>, <span class="keyword">true</span>);00384         }00385 00386         <span class="keywordflow">if</span> (m_target &amp;&amp; m_passSignal)00387                 m_target-&gt;<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_10">ChannelInitialize</a>(channel, parameters, propagation);00388 }00389 00390 <span class="comment">// *************************************************************</span>00391 00392 ProxyFilter::ProxyFilter(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *filter, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lastSize, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment)00393         : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(firstSize, 1, lastSize, attachment), m_filter(filter), m_proxy(NULL)00394 {00395         <span class="keywordflow">if</span> (m_filter.get())00396                 m_filter-&gt;Attach(m_proxy = <span class="keyword">new</span> OutputProxy(*<span class="keyword">this</span>, <span class="keyword">false</span>));00397 }00398 00399 <span class="keywordtype">void</span> <a class="code" href="class_filter_with_buffered_input.html#_stream_transformation_filtera8">ProxyFilter::IsolatedFlush</a>(<span class="keywordtype">bool</span> completeFlush)00400 {00401         <span class="keywordflow">if</span> (m_filter.get())00402         {00403                 <span class="keywordtype">bool</span> passSignal = m_proxy-&gt;GetPassSignal();00404                 m_proxy-&gt;SetPassSignal(<span class="keyword">false</span>);00405                 m_filter-&gt;Flush(completeFlush, -1);00406                 m_proxy-&gt;SetPassSignal(passSignal);00407         }00408 }00409 00410 <span class="keywordtype">void</span> ProxyFilter::SetFilter(<a class="code" href="class_filter.html">Filter</a> *filter)00411 {00412         <span class="keywordtype">bool</span> passSignal = m_proxy ? m_proxy-&gt;GetPassSignal() : false;00413         m_filter.reset(filter);00414         <span class="keywordflow">if</span> (filter)00415         {00416                 std::auto_ptr&lt;OutputProxy&gt; temp(m_proxy = <span class="keyword">new</span> OutputProxy(*<span class="keyword">this</span>, passSignal));00417                 m_filter-&gt;TransferAllTo(*m_proxy);00418                 m_filter-&gt;Attach(temp.release());00419         }00420         <span class="keywordflow">else</span>00421                 m_proxy=NULL;00422 }00423 00424 <span class="keywordtype">void</span> ProxyFilter::NextPutMultiple(<span class="keyword">const</span> byte *s, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len) 00425 {00426         <span class="keywordflow">if</span> (m_filter.get())00427                 m_filter-&gt;Put(s, len);00428 }00429 00430 <span class="comment">// *************************************************************</span>00431 <a name="l00432"></a><a class="code" href="class_array_sink.html#_array_sinka6">00432</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_array_sink.html#_array_sinka6">ArraySink::Put2</a>(<span class="keyword">const</span> byte *begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)00433 {00434         memcpy(m_buf+m_total, begin, STDMIN(length, SaturatingSubtract(m_size, m_total)));00435         m_total += length;00436         <span class="keywordflow">return</span> 0;00437 }00438 <a name="l00439"></a><a class="code" href="class_array_sink.html#_array_sinka5">00439</a> byte * <a class="code" href="class_array_sink.html#_array_sinka5">ArraySink::CreatePutSpace</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;size)00440 {00441         size = m_size - m_total;00442         <span class="keywordflow">return</span> m_buf + m_total;00443 }00444 00445 <span class="keywordtype">void</span> ArraySink::IsolatedInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)00446 {00447         ByteArrayParameter array;00448         <span class="keywordflow">if</span> (!parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(Name::OutputBuffer(), array))00449                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"ArraySink: missing OutputBuffer argument"</span>);00450         m_buf = array.begin();00451         m_size = array.size();00452         m_total = 0;00453 }00454 <a name="l00455"></a><a class="code" href="class_array_xor_sink.html#_array_xor_sinka1">00455</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_array_xor_sink.html#_array_xor_sinka1">ArrayXorSink::Put2</a>(<span class="keyword">const</span> byte *begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)00456 {00457         xorbuf(m_buf+m_total, begin, STDMIN(length, SaturatingSubtract(m_size, m_total)));00458         m_total += length;00459         <span class="keywordflow">return</span> 0;00460 }00461 00462 <span class="comment">// *************************************************************</span>00463 00464 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> StreamTransformationFilter::LastBlockSize(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &amp;c, BlockPaddingScheme padding)00465 {00466         <span class="keywordflow">if</span> (c.MinLastBlockSize() &gt; 0)00467                 <span class="keywordflow">return</span> c.MinLastBlockSize();00468         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c.MandatoryBlockSize() &gt; 1 &amp;&amp; !c.IsForwardTransformation() &amp;&amp; padding != NO_PADDING &amp;&amp; padding != ZEROS_PADDING)00469                 <span class="keywordflow">return</span> c.MandatoryBlockSize();00470         <span class="keywordflow">else</span>00471                 <span class="keywordflow">return</span> 0;00472 }00473 <a name="l00474"></a><a class="code" href="class_stream_transformation_filter.html#_stream_transformation_filtera0">00474</a> <a class="code" href="class_stream_transformation_filter.html#_stream_transformation_filtera0">StreamTransformationFilter::StreamTransformationFilter</a>(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &amp;c, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment, BlockPaddingScheme padding)00475    : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(0, c.MandatoryBlockSize(), LastBlockSize(c, padding), attachment)00476         , m_cipher(c)00477 {00478         assert(c.MinLastBlockSize() == 0 || c.MinLastBlockSize() &gt; c.MandatoryBlockSize());00479 

⌨️ 快捷键说明

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