gfpcrypt_8cpp-source.html

来自「Crypto++是一个非常强大的密码学库,主要是功能全」· HTML 代码 · 共 268 行 · 第 1/2 页

HTML
268
字号
00128 00129                 <span class="comment">// verifying that Lucas((p+1)/2, w, p)==2 is omitted because it's too costly</span>00130                 <span class="comment">// and at most 1 bit is leaked if it's false</span>00131                 <span class="keywordtype">bool</span> fullValidate = (GetFieldType() == 2 &amp;&amp; level &gt;= 3) || !FastSubgroupCheckAvailable();00132 00133                 <span class="keywordflow">if</span> (fullValidate)00134                         pass = pass &amp;&amp; IsIdentity(gpc ? gpc-&gt;Exponentiate(GetGroupPrecomputation(), q) : ExponentiateElement(g, q));00135                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GetFieldType() == 1)00136                         pass = pass &amp;&amp; Jacobi(g, p) == 1;00137         }00138 00139         <span class="keywordflow">return</span> pass;00140 }00141 <a name="l00142"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a10">00142</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a10">DL_GroupParameters_IntegerBased::GenerateRandom</a>(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;alg)00143 {00144         <a class="code" href="class_integer.html">Integer</a> p, q, g;00145         00146         <span class="keywordflow">if</span> (alg.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(<span class="stringliteral">"Modulus"</span>, p) &amp;&amp; alg.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(<span class="stringliteral">"SubgroupGenerator"</span>, g))00147         {00148                 q = alg.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="stringliteral">"SubgroupOrder"</span>, ComputeGroupOrder(p)/2);00149         }00150         <span class="keywordflow">else</span>00151         {00152                 <span class="keywordtype">int</span> modulusSize, subgroupOrderSize;00153 00154                 <span class="keywordflow">if</span> (!alg.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha42">GetIntValue</a>(<span class="stringliteral">"ModulusSize"</span>, modulusSize))00155                         modulusSize = alg.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha43">GetIntValueWithDefault</a>(<span class="stringliteral">"KeySize"</span>, 2048);00156 00157                 <span class="keywordflow">if</span> (!alg.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha42">GetIntValue</a>(<span class="stringliteral">"SubgroupOrderSize"</span>, subgroupOrderSize))00158                         subgroupOrderSize = GetDefaultSubgroupOrderSize(modulusSize);00159 00160                 <a class="code" href="class_prime_and_generator.html">PrimeAndGenerator</a> pg;00161                 pg.<a class="code" href="class_prime_and_generator.html#_prime_and_generatora3">Generate</a>(GetFieldType() == 1 ? 1 : -1, rng, modulusSize, subgroupOrderSize);00162                 p = pg.<a class="code" href="class_prime_and_generator.html#_prime_and_generatora4">Prime</a>();00163                 q = pg.<a class="code" href="class_prime_and_generator.html#_prime_and_generatora5">SubPrime</a>();00164                 g = pg.<a class="code" href="class_prime_and_generator.html#_prime_and_generatora6">Generator</a>();00165         }00166 00167         Initialize(p, q, g);00168 }00169 00170 <a class="code" href="class_integer.html">Integer</a> DL_GroupParameters_IntegerBased::DecodeElement(<span class="keyword">const</span> byte *encoded, <span class="keywordtype">bool</span> checkForGroupMembership)<span class="keyword"> const</span>00171 <span class="keyword"></span>{00172         <a class="code" href="class_integer.html">Integer</a> g(encoded, GetModulus().ByteCount());00173         <span class="keywordflow">if</span> (!ValidateElement(1, g, NULL))00174                 <span class="keywordflow">throw</span> DL_BadElement();00175         <span class="keywordflow">return</span> g;00176 }00177 <a name="l00178"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a8">00178</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a8">DL_GroupParameters_IntegerBased::BERDecode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)00179 {00180         <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> parameters(bt);00181                 <a class="code" href="class_integer.html">Integer</a> p(parameters);00182                 <a class="code" href="class_integer.html">Integer</a> q(parameters);00183                 <a class="code" href="class_integer.html">Integer</a> g;00184                 <span class="keywordflow">if</span> (parameters.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera4">EndReached</a>())00185                 {00186                         g = q;00187                         q = ComputeGroupOrder(p) / 2;00188                 }00189                 <span class="keywordflow">else</span>00190                         g.BERDecode(parameters);00191         parameters.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00192 00193         SetModulusAndSubgroupGenerator(p, g);00194         SetSubgroupOrder(q);00195 }00196 <a name="l00197"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a9">00197</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a9">DL_GroupParameters_IntegerBased::DEREncode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00198 <span class="keyword"></span>{00199         <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> parameters(bt);00200                 GetModulus().<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(parameters);00201                 m_q.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(parameters);00202                 GetSubgroupGenerator().DEREncode(parameters);00203         parameters.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00204 }00205 <a name="l00206"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a11">00206</a> <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a11">DL_GroupParameters_IntegerBased::GetVoidValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &amp;valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const</span>00207 <span class="keyword"></span>{00208         <span class="keywordflow">return</span> GetValueHelper&lt;DL_GroupParameters&lt;Element&gt; &gt;(<span class="keyword">this</span>, name, valueType, pValue)00209                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a15">Modulus</a>);00210 }00211 <a name="l00212"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a12">00212</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___integer_based.html#_d_l___group_parameters_impl_3_01_mod_exp_precomputation_00_01_d_l___fixed_base_precomputation_impl_3_01typename_mod_exp_precomputation_1_1_element_01_4_00_01_d_l___group_parameters___integer_based_01_4a12">DL_GroupParameters_IntegerBased::AssignFrom</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source)00213 {00214         AssignFromHelper(<span class="keyword">this</span>, source)00215                 CRYPTOPP_SET_FUNCTION_ENTRY2(<a class="code" href="namespace_name.html#a15">Modulus</a>, <a class="code" href="namespace_name.html#a21">SubgroupGenerator</a>)00216                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a19">SubgroupOrder</a>)00217                 ;00218 }00219 00220 <a class="code" href="class_o_i_d.html">OID</a> DL_GroupParameters_IntegerBased::GetAlgorithmID()<span class="keyword"> const</span>00221 <span class="keyword"></span>{00222         <span class="keywordflow">return</span> ASN1::id_dsa();00223 }00224 00225 <span class="keywordtype">void</span> DL_GroupParameters_GFP::SimultaneousExponentiate(Element *results, <span class="keyword">const</span> Element &amp;base, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> *exponents, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exponentsCount)<span class="keyword"> const</span>00226 <span class="keyword"></span>{00227         <a class="code" href="class_modular_arithmetic.html">ModularArithmetic</a> ma(GetModulus());00228         ma.<a class="code" href="class_modular_arithmetic.html#_modular_arithmetica28">SimultaneousExponentiate</a>(results, base, exponents, exponentsCount);00229 }00230 00231 DL_GroupParameters_GFP::Element DL_GroupParameters_GFP::MultiplyElements(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b)<span class="keyword"> const</span>00232 <span class="keyword"></span>{00233         <span class="keywordflow">return</span> a_times_b_mod_c(a, b, GetModulus());00234 }00235 00236 DL_GroupParameters_GFP::Element DL_GroupParameters_GFP::CascadeExponentiate(<span class="keyword">const</span> Element &amp;element1, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;exponent1, <span class="keyword">const</span> Element &amp;element2, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;exponent2)<span class="keyword"> const</span>00237 <span class="keyword"></span>{00238         <a class="code" href="class_modular_arithmetic.html">ModularArithmetic</a> ma(GetModulus());00239         <span class="keywordflow">return</span> ma.<a class="code" href="class_modular_arithmetic.html#_modular_arithmetica27">CascadeExponentiate</a>(element1, exponent1, element2, exponent2);00240 }00241 00242 <a class="code" href="class_integer.html">Integer</a> DL_GroupParameters_IntegerBased::GetMaxExponent()<span class="keyword"> const</span>00243 <span class="keyword"></span>{00244         <span class="keywordflow">return</span> STDMIN(GetSubgroupOrder()-1, Integer::Power2(2*DiscreteLogWorkFactor(GetFieldType()*GetModulus().BitCount())));00245 }00246 00247 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> DL_GroupParameters_IntegerBased::GetDefaultSubgroupOrderSize(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modulusSize)<span class="keyword"> const</span>00248 <span class="keyword"></span>{00249         <span class="keywordflow">return</span> 2*DiscreteLogWorkFactor(GetFieldType()*modulusSize);00250 }00251 00252 NAMESPACE_END00253 00254 <span class="preprocessor">#endif</span></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 + =
减小字号Ctrl + -
显示快捷键?