📄 ida_8cpp-source.html
字号:
00288 m_pad = parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="stringliteral">"RemovePadding"</span>, <span class="keyword">true</span>);00289 <a class="code" href="class_filter.html#_zlib_decompressora13">RawIDA::Initialize</a>(CombinedNameValuePairs(parameters, MakeParameters(<span class="stringliteral">"OutputChannelID"</span>, (word32)0xffffffff)), propagation);00290 }00291 00292 <span class="keywordtype">void</span> SecretRecovery::FlushOutputQueues()00293 {00294 <span class="keywordflow">if</span> (m_pad)00295 m_outputQueues[0].TransferTo(*<a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>(), m_outputQueues[0].<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_0">MaxRetrievable</a>()-4);00296 <span class="keywordflow">else</span>00297 m_outputQueues[0].TransferTo(*<a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>());00298 }00299 00300 <span class="keywordtype">void</span> SecretRecovery::OutputMessageEnds()00301 {00302 <span class="keywordflow">if</span> (m_pad)00303 {00304 PaddingRemover paddingRemover(<span class="keyword">new</span> <a class="code" href="class_redirector.html">Redirector</a>(*<a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()));00305 m_outputQueues[0].TransferAllTo(paddingRemover);00306 }00307 00308 <span class="keywordflow">if</span> (GetAutoSignalPropagation() != 0)00309 <a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_7">MessageEnd</a>(GetAutoSignalPropagation()-1);00310 }00311 00312 <span class="comment">// ****************************************************************</span>00313 00314 <span class="keywordtype">void</span> <a class="code" href="class_information_dispersal.html#_information_dispersala1">InformationDispersal::Initialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters, <span class="keywordtype">int</span> propagation)00315 {00316 m_nextChannel = 0;00317 m_pad = parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="stringliteral">"AddPadding"</span>, <span class="keyword">true</span>);00318 m_ida.Initialize(parameters, propagation);00319 }00320 00321 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_information_dispersal.html#_information_dispersala2">InformationDispersal::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)00322 {00323 <span class="keywordflow">if</span> (!blocking)00324 <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">"InformationDispersal"</span>);00325 00326 <span class="keywordflow">while</span> (length--)00327 {00328 m_ida.<a class="code" href="class_raw_i_d_a.html#_secret_recoverya4">ChannelData</a>(m_nextChannel, begin, 1, <span class="keyword">false</span>);00329 begin++;00330 m_nextChannel++;00331 <span class="keywordflow">if</span> (m_nextChannel == m_ida.<a class="code" href="class_raw_i_d_a.html#_secret_recoverya2">GetThreshold</a>())00332 m_nextChannel = 0;00333 }00334 00335 <span class="keywordflow">if</span> (messageEnd)00336 {00337 m_ida.SetAutoSignalPropagation(messageEnd-1);00338 <span class="keywordflow">if</span> (m_pad)00339 <a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">InformationDispersal::Put</a>(1);00340 <span class="keywordflow">for</span> (word32 i=0; i<m_ida.<a class="code" href="class_raw_i_d_a.html#_secret_recoverya2">GetThreshold</a>(); i++)00341 m_ida.<a class="code" href="class_raw_i_d_a.html#_secret_recoverya4">ChannelData</a>(i, NULL, 0, <span class="keyword">true</span>);00342 }00343 00344 <span class="keywordflow">return</span> 0;00345 }00346 00347 <span class="keywordtype">void</span> <a class="code" href="class_information_recovery.html#_information_recoverya1">InformationRecovery::Initialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters, <span class="keywordtype">int</span> propagation)00348 {00349 m_pad = parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="stringliteral">"RemovePadding"</span>, <span class="keyword">true</span>);00350 <a class="code" href="class_filter.html#_zlib_decompressora13">RawIDA::Initialize</a>(parameters, propagation);00351 }00352 00353 <span class="keywordtype">void</span> InformationRecovery::FlushOutputQueues()00354 {00355 <span class="keywordflow">while</span> (m_outputQueues[0].AnyRetrievable())00356 {00357 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<m_outputChannelIds.size(); i++)00358 m_outputQueues[i].TransferTo(m_queue, 1);00359 }00360 00361 <span class="keywordflow">if</span> (m_pad)00362 m_queue.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_10">TransferTo</a>(*<a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>(), m_queue.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera3">MaxRetrievable</a>()-4*m_threshold);00363 <span class="keywordflow">else</span>00364 m_queue.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_10">TransferTo</a>(*<a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>());00365 }00366 00367 <span class="keywordtype">void</span> InformationRecovery::OutputMessageEnds()00368 {00369 <span class="keywordflow">if</span> (m_pad)00370 {00371 PaddingRemover paddingRemover(<span class="keyword">new</span> <a class="code" href="class_redirector.html">Redirector</a>(*<a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()));00372 m_queue.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz9_8">TransferAllTo</a>(paddingRemover);00373 }00374 00375 <span class="keywordflow">if</span> (GetAutoSignalPropagation() != 0)00376 <a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_7">MessageEnd</a>(GetAutoSignalPropagation()-1);00377 }00378 00379 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> PaddingRemover::Put2(<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)00380 {00381 <span class="keywordflow">if</span> (!blocking)00382 <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">"PaddingRemover"</span>);00383 00384 <span class="keyword">const</span> byte *<span class="keyword">const</span> end = begin + length;00385 00386 <span class="keywordflow">if</span> (m_possiblePadding)00387 {00388 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = find_if(begin, end, bind2nd(not_equal_to<byte>(), 0)) - begin;00389 m_zeroCount += len;00390 begin += len;00391 <span class="keywordflow">if</span> (begin == end)00392 <span class="keywordflow">return</span> 0;00393 00394 <a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(1);00395 <span class="keywordflow">while</span> (m_zeroCount--)00396 <a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(0);00397 <a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(*begin++);00398 m_possiblePadding = <span class="keyword">false</span>;00399 }00400 00401 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__MWERKS__)</span>00402 <span class="preprocessor"></span> <span class="comment">// VC60 workaround: built-in reverse_iterator has two template parameters, Dinkumware only has one</span>00403 <span class="keyword">typedef</span> reverse_bidirectional_iterator<const byte *, const byte> rit;00404 <span class="preprocessor">#else</span>00405 <span class="preprocessor"></span> <span class="keyword">typedef</span> reverse_iterator<const byte *> rit;00406 <span class="preprocessor">#endif</span>00407 <span class="preprocessor"></span> <span class="keyword">const</span> byte *x = find_if(rit(end), rit(begin), bind2nd(not_equal_to<byte>(), 0)).base();00408 <span class="keywordflow">if</span> (x != begin && *(x-1) == 1)00409 {00410 <a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(begin, x-begin-1);00411 m_possiblePadding = <span class="keyword">true</span>;00412 m_zeroCount = end - x;00413 }00414 <span class="keywordflow">else</span>00415 <a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(begin, end-begin);00416 00417 <span class="keywordflow">if</span> (messageEnd)00418 {00419 m_possiblePadding = <span class="keyword">false</span>;00420 Output(0, begin, length, messageEnd, blocking);00421 }00422 <span class="keywordflow">return</span> 0;00423 }00424 00425 NAMESPACE_END</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:16 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -