📄 luc_8h-source.html
字号:
<a name="l00112"></a>00112 <span class="comment">// ********************************************************</span><a name="l00113"></a>00113 <a name="l00114"></a>00114 <span class="comment">// no actual precomputation</span><a name="l00115"></a><a class="code" href="class_d_l___group_precomputation___l_u_c.html">00115</a> <span class="keyword">class </span><a class="code" href="class_d_l___group_precomputation___l_u_c.html">DL_GroupPrecomputation_LUC</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation</a><Integer><a name="l00116"></a>00116 {<a name="l00117"></a>00117 <span class="keyword">public</span>:<a name="l00118"></a><a class="code" href="class_d_l___group_precomputation___l_u_c.html#c45457ab2044ff01e4f8c8a77534044f">00118</a> <span class="keyword">const</span> <a class="code" href="class_abstract_group.html" title="Abstract Group.">AbstractGroup<Element></a> & <a class="code" href="class_d_l___group_precomputation___l_u_c.html#c45457ab2044ff01e4f8c8a77534044f">GetGroup</a>()<span class="keyword"> const </span>{assert(<span class="keyword">false</span>); <span class="keywordflow">throw</span> 0;}<a name="l00119"></a><a class="code" href="class_d_l___group_precomputation___l_u_c.html#35d98978f65ba1d73a5f10383257cbcb">00119</a> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> <a class="code" href="class_d_l___group_precomputation___l_u_c.html#35d98978f65ba1d73a5f10383257cbcb">BERDecodeElement</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a>(bt);}<a name="l00120"></a><a class="code" href="class_d_l___group_precomputation___l_u_c.html#25fba9d654cad538bde564b058eb100b">00120</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_precomputation___l_u_c.html#25fba9d654cad538bde564b058eb100b">DEREncodeElement</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> &v)<span class="keyword"> const </span>{v.<a class="code" href="class_integer.html#6ab51a05bee88cfa690179611e8a084e" title="encode using Distinguished Encoding Rules, put result into a BufferedTransformation...">DEREncode</a>(bt);}<a name="l00121"></a>00121 <a name="l00122"></a>00122 <span class="comment">// non-inherited</span><a name="l00123"></a><a class="code" href="class_d_l___group_precomputation___l_u_c.html#ee69e214c0c390a463034c7c076291a7">00123</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_precomputation___l_u_c.html#ee69e214c0c390a463034c7c076291a7">SetModulus</a>(<span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &v) {m_p = v;}<a name="l00124"></a><a class="code" href="class_d_l___group_precomputation___l_u_c.html#3e00bfa0db144e9e5491615a6bed1bd5">00124</a> <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> & <a class="code" href="class_d_l___group_precomputation___l_u_c.html#3e00bfa0db144e9e5491615a6bed1bd5">GetModulus</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_p;}<a name="l00125"></a>00125 <a name="l00126"></a>00126 <span class="keyword">private</span>:<a name="l00127"></a>00127 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> m_p;<a name="l00128"></a>00128 };<a name="l00129"></a>00129 <span class="comment"></span><a name="l00130"></a>00130 <span class="comment">//! _</span><a name="l00131"></a><a class="code" href="class_d_l___base_precomputation___l_u_c.html">00131</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="class_d_l___base_precomputation___l_u_c.html" title="_">DL_BasePrecomputation_LUC</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation</a><Integer><a name="l00132"></a>00132 {<a name="l00133"></a>00133 <span class="keyword">public</span>:<a name="l00134"></a>00134 <span class="comment">// DL_FixedBasePrecomputation</span><a name="l00135"></a><a class="code" href="class_d_l___base_precomputation___l_u_c.html#a827de4576c4d1b8a3a474872ff14796">00135</a> <span class="keywordtype">bool</span> <a class="code" href="class_d_l___base_precomputation___l_u_c.html#a827de4576c4d1b8a3a474872ff14796">IsInitialized</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_g.<a class="code" href="class_integer.html#5364029d13bf6d21e7b578127160dbed">NotZero</a>();}<a name="l00136"></a><a class="code" href="class_d_l___base_precomputation___l_u_c.html#6d865ec1833d0d4c5f30647ca7b2e9a7">00136</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___base_precomputation___l_u_c.html#6d865ec1833d0d4c5f30647ca7b2e9a7">SetBase</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation<Element></a> &group, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &base) {m_g = base;}<a name="l00137"></a><a class="code" href="class_d_l___base_precomputation___l_u_c.html#e3f798a940fa6e8817e63d252905b628">00137</a> <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> & <a class="code" href="class_d_l___base_precomputation___l_u_c.html#e3f798a940fa6e8817e63d252905b628">GetBase</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation<Element></a> &group)<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_g;}<a name="l00138"></a><a class="code" href="class_d_l___base_precomputation___l_u_c.html#635c3728cec2a472716bbab2dc6bbe29">00138</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___base_precomputation___l_u_c.html#635c3728cec2a472716bbab2dc6bbe29">Precompute</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation<Element></a> &group, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxExpBits, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> storage) {}<a name="l00139"></a><a class="code" href="class_d_l___base_precomputation___l_u_c.html#29ef2941ab5722671d60a35e5f11a357">00139</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___base_precomputation___l_u_c.html#29ef2941ab5722671d60a35e5f11a357">Load</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation<Element></a> &group, <a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &storedPrecomputation) {}<a name="l00140"></a><a class="code" href="class_d_l___base_precomputation___l_u_c.html#53f91378ed493e00439e40f30eb26e25">00140</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___base_precomputation___l_u_c.html#53f91378ed493e00439e40f30eb26e25">Save</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation<Element></a> &group, <a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &storedPrecomputation)<span class="keyword"> const </span>{}<a name="l00141"></a>00141 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> <a class="code" href="class_d_l___base_precomputation___l_u_c.html#fae3f21615a2df17ecd5e204aeb3ac75">Exponentiate</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation<Element></a> &group, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &exponent) <span class="keyword">const</span>;<a name="l00142"></a><a class="code" href="class_d_l___base_precomputation___l_u_c.html#bc7aa45c73d448e325c33eb3a2eac254">00142</a> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> <a class="code" href="class_d_l___base_precomputation___l_u_c.html#bc7aa45c73d448e325c33eb3a2eac254">CascadeExponentiate</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation<Element></a> &group, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &exponent, <span class="keyword">const</span> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation<Integer></a> &pc2, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &exponent2)<span class="keyword"> const</span><a name="l00143"></a>00143 <span class="keyword"> </span>{<span class="keywordflow">throw</span> <a class="code" href="class_not_implemented.html" title="exception thrown by a class if a non-implemented method is called">NotImplemented</a>(<span class="stringliteral">"DL_BasePrecomputation_LUC: CascadeExponentiate not implemented"</span>);} <span class="comment">// shouldn't be called</span><a name="l00144"></a>00144 <a name="l00145"></a>00145 <span class="keyword">private</span>:<a name="l00146"></a>00146 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> m_g;<a name="l00147"></a>00147 };<a name="l00148"></a>00148 <span class="comment"></span><a name="l00149"></a>00149 <span class="comment">//! _</span><a name="l00150"></a><a class="code" href="class_d_l___group_parameters___l_u_c.html">00150</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="class_d_l___group_parameters___l_u_c.html" title="_">DL_GroupParameters_LUC</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html" title="_">DL_GroupParameters_IntegerBasedImpl</a><DL_GroupPrecomputation_LUC, DL_BasePrecomputation_LUC><a name="l00151"></a>00151 {<a name="l00152"></a>00152 <span class="keyword">public</span>:<a name="l00153"></a>00153 <span class="comment">// DL_GroupParameters</span><a name="l00154"></a><a class="code" href="class_d_l___group_parameters___l_u_c.html#850f7fd1cf579fb80ee10334db411b0a">00154</a> <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___l_u_c.html#850f7fd1cf579fb80ee10334db411b0a">IsIdentity</a>(<span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &element)<span class="keyword"> const </span>{<span class="keywordflow">return</span> element == <a class="code" href="class_integer.html#f0cb74a45a48e677952166bdac9d82d7" title="avoid calling constructors for these frequently used integers">Integer::Two</a>();}<a name="l00155"></a>00155 <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___l_u_c.html#21a11871ed32c03b08cc9821fae71145">SimultaneousExponentiate</a>(<a class="code" href="class_d_l___group_parameters___integer_based_impl.html#0d2ec78e9a74ec651474b995e931aa74">Element</a> *results, <span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html#0d2ec78e9a74ec651474b995e931aa74">Element</a> &base, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> *exponents, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exponentsCount) <span class="keyword">const</span>;<a name="l00156"></a><a class="code" href="class_d_l___group_parameters___l_u_c.html#e0974f396909312502533e8eca5516d4">00156</a> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> <a class="code" href="class_d_l___group_parameters___l_u_c.html#e0974f396909312502533e8eca5516d4">MultiplyElements</a>(<span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> &a, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> &b)<span class="keyword"> const</span><a name="l00157"></a>00157 <span class="keyword"> </span>{<span class="keywordflow">throw</span> <a class="code" href="class_not_implemented.html" title="exception thrown by a class if a non-implemented method is called">NotImplemented</a>(<span class="stringliteral">"LUC_GroupParameters: MultiplyElements can not be implemented"</span>);}<a name="l00158"></a><a class="code" href="class_d_l___group_parameters___l_u_c.html#ab12075f368af85622792fa3c03515f2">00158</a> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> <a class="code" href="class_d_l___group_parameters___l_u_c.html#ab12075f368af85622792fa3c03515f2">CascadeExponentiate</a>(<span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> &element1, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &exponent1, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> &element2, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &exponent2)<span class="keyword"> const</span><a name="l00159"></a>00159 <span class="keyword"> </span>{<span class="keywordflow">throw</span> <a class="code" href="class_not_implemented.html" title="exception thrown by a class if a non-implemented method is called">NotImplemented</a>(<span class="stringliteral">"LUC_GroupParameters: MultiplyElements can not be implemented"</span>);}<a name="l00160"></a>00160 <a name="l00161"></a>00161 <span class="comment">// NameValuePairs interface</span><a name="l00162"></a><a class="code" href="class_d_l___group_parameters___l_u_c.html#1fe69d1b816aafccc929ac5f17148330">00162</a> <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___l_u_c.html#1fe69d1b816aafccc929ac5f17148330" title="to be implemented by derived classes, users should use one of the above functions...">GetVoidValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const</span><a name="l00163"></a>00163 <span class="keyword"> </span>{<a name="l00164"></a>00164 <span class="keywordflow">return</span> GetValueHelper<DL_GroupParameters_IntegerBased>(<span class="keyword">this</span>, name, valueType, pValue).Assignable();<a name="l00165"></a>00165 }<a name="l00166"></a>00166 <a name="l00167"></a>00167 <span class="keyword">private</span>:<a name="l00168"></a>00168 <span class="keywordtype">int</span> GetFieldType()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 2;}<a name="l00169"></a>00169 };<a name="l00170"></a>00170 <span class="comment"></span><a name="l00171"></a>00171 <span class="comment">//! _</span><a name="l00172"></a><a class="code" href="class_d_l___group_parameters___l_u_c___default_safe_prime.html">00172</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="class_d_l___group_parameters___l_u_c___default_safe_prime.html" title="_">DL_GroupParameters_LUC_DefaultSafePrime</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___group_parameters___l_u_c.html" title="_">DL_GroupParameters_LUC</a><a name="l00173"></a>00173 {<a name="l00174"></a>00174 <span class="keyword">public</span>:<a name="l00175"></a><a class="code" href="class_d_l___group_parameters___l_u_c___default_safe_prime.html#688e5112ab2717150e157be85ed1b0dc">00175</a> <span class="keyword">typedef</span> <a class="code" href="struct_enum_to_type.html">NoCofactorMultiplication</a> <a class="code" href="struct_enum_to_type.html">DefaultCofactorOption</a>;<a name="l00176"></a>00176 <a name="l00177"></a>00177 <span class="keyword">protected</span>:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -