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

📄 ida_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Crypto++: ida.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.2 --><div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Compound&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Compound&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div><h1>ida.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// ida.cpp - written and placed in the public domain by Wei Dai</span>00002 00003 <span class="preprocessor">#include "pch.h"</span>00004 <span class="preprocessor">#include "ida.h"</span>00005 00006 <span class="preprocessor">#include "algebra.h"</span>00007 <span class="preprocessor">#include "gf2_32.h"</span>00008 <span class="preprocessor">#include "<a class="code" href="polynomi_8h.html">polynomi.h</a>"</span>00009 00010 <span class="preprocessor">#include "polynomi.cpp"</span>00011 00012 ANONYMOUS_NAMESPACE_BEGIN00013 <span class="keyword">static</span> <span class="keyword">const</span> CryptoPP::GF2_32 field;00014 NAMESPACE_END00015 00016 <span class="keyword">using</span> <span class="keyword">namespace </span>std;00017 00018 NAMESPACE_BEGIN(CryptoPP)00019 00020 <span class="keywordtype">void</span> RawIDA::ChannelInitialize(<span class="keyword">const</span> 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)00021 {00022         <span class="keywordflow">if</span> (!channel.empty())00023                 <span class="keywordflow">throw</span> <a class="code" href="class_not_implemented.html">NotImplemented</a>(<span class="stringliteral">"RawIDA: can't reinitialize a channel"</span>);00024 00025         <span class="keywordflow">if</span> (!parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha42">GetIntValue</a>(<span class="stringliteral">"RecoveryThreshold"</span>, m_threshold))00026                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"RawIDA: missing RecoveryThreshold argument"</span>);00027 00028         <span class="keywordflow">if</span> (m_threshold &lt;= 0)00029                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"RawIDA: RecoveryThreshold must be greater than 0"</span>);00030 00031         m_lastMapPosition = m_inputChannelMap.end();00032         m_channelsReady = 0;00033         m_channelsFinished = 0;00034         m_w.<a class="code" href="class_sec_block.html#_sec_block_with_hinta19">New</a>(m_threshold);00035         m_y.<a class="code" href="class_sec_block.html#_sec_block_with_hinta19">New</a>(m_threshold);00036         m_inputQueues.reserve(m_threshold);00037 00038         m_outputChannelIds.clear();00039         m_outputChannelIdStrings.clear();00040         m_outputQueues.clear();00041 00042         word32 outputChannelID;00043         <span class="keywordflow">if</span> (parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(<span class="stringliteral">"OutputChannelID"</span>, outputChannelID))00044                 AddOutputChannel(outputChannelID);00045         <span class="keywordflow">else</span>00046         {00047                 <span class="keywordtype">int</span> nShares = parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha43">GetIntValueWithDefault</a>(<span class="stringliteral">"NumberOfShares"</span>, m_threshold);00048                 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;nShares; i++)00049                         AddOutputChannel(i);00050         }00051 00052         <span class="keywordflow">if</span> (propagation)00053                 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;m_outputChannelIds.size(); i++)00054                         <a class="code" href="class_filter.html#_zlib_decompressora8">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_10">ChannelInitialize</a>(m_outputChannelIdStrings[i], parameters, propagation-1);00055 }00056 00057 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> RawIDA::InsertInputChannel(word32 channelId)00058 {00059         <span class="keywordflow">if</span> (m_lastMapPosition != m_inputChannelMap.end())00060         {00061                 <span class="keywordflow">if</span> (m_lastMapPosition-&gt;first == channelId)00062                         <span class="keywordflow">goto</span> skipFind;00063                 ++m_lastMapPosition;00064                 <span class="keywordflow">if</span> (m_lastMapPosition != m_inputChannelMap.end() &amp;&amp; m_lastMapPosition-&gt;first == channelId)00065                         <span class="keywordflow">goto</span> skipFind;00066         }00067         m_lastMapPosition = m_inputChannelMap.find(channelId);00068 00069 skipFind:00070         <span class="keywordflow">if</span> (m_lastMapPosition == m_inputChannelMap.end())00071         {00072                 <span class="keywordflow">if</span> (m_inputChannelIds.size() == m_threshold)00073                         <span class="keywordflow">return</span> m_threshold;00074 00075                 m_lastMapPosition = m_inputChannelMap.insert(pair&lt;const unsigned long, unsigned int&gt;(channelId, m_inputChannelIds.size())).first;00076                 m_inputQueues.push_back(<a class="code" href="class_message_queue.html">MessageQueue</a>());00077                 m_inputChannelIds.push_back(channelId);00078 00079                 <span class="keywordflow">if</span> (m_inputChannelIds.size() == m_threshold)00080                         PrepareInterpolation();00081         }00082         <span class="keywordflow">return</span> m_lastMapPosition-&gt;second;00083 }00084 00085 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> RawIDA::LookupInputChannel(word32 channelId)<span class="keyword"> const</span>00086 <span class="keyword"></span>{00087         map&lt;word32, unsigned int&gt;::const_iterator it = m_inputChannelMap.find(channelId);00088         <span class="keywordflow">if</span> (it == m_inputChannelMap.end())00089                 <span class="keywordflow">return</span> m_threshold;00090         <span class="keywordflow">else</span>00091                 <span class="keywordflow">return</span> it-&gt;second;00092 }00093 00094 <span class="keywordtype">void</span> RawIDA::ChannelData(word32 channelId, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">bool</span> messageEnd)00095 {00096         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = InsertInputChannel(channelId);00097         <span class="keywordflow">if</span> (i &lt; m_threshold)00098         {00099                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> size = m_inputQueues[i].MaxRetrievable();00100                 m_inputQueues[i].Put(inString, length);00101                 <span class="keywordflow">if</span> (size &lt; 4 &amp;&amp; size + length &gt;= 4)00102                 {00103                         m_channelsReady++;00104                         <span class="keywordflow">if</span> (m_channelsReady == m_threshold)00105                                 ProcessInputQueues();00106                 }00107 00108                 <span class="keywordflow">if</span> (messageEnd)00109                 {00110                         m_inputQueues[i].MessageEnd();00111                         <span class="keywordflow">if</span> (m_inputQueues[i].NumberOfMessages() == 1)00112                         {00113                                 m_channelsFinished++;00114                                 <span class="keywordflow">if</span> (m_channelsFinished == m_threshold)00115                                 {00116                                         m_channelsReady = 0;00117                                         <span class="keywordflow">for</span> (i=0; i&lt;m_threshold; i++)00118                                                 m_channelsReady += m_inputQueues[i].AnyRetrievable();00119                                         ProcessInputQueues();00120                                 }00121                         }00122                 }00123         }00124 }00125 00126 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> RawIDA::InputBuffered(word32 channelId)<span class="keyword"> const</span>00127 <span class="keyword"></span>{00128         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = LookupInputChannel(channelId);00129         <span class="keywordflow">return</span> i &lt; m_threshold ? m_inputQueues[i].MaxRetrievable() : 0;00130 }00131 00132 <span class="keywordtype">void</span> RawIDA::ComputeV(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)00133 {00134         <span class="keywordflow">if</span> (i &gt;= m_v.size())00135         {00136                 m_v.resize(i+1);00137                 m_outputToInput.resize(i+1);00138         }00139 00140         m_outputToInput[i] = LookupInputChannel(m_outputChannelIds[i]);

⌨️ 快捷键说明

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