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 && level >= 3) || !FastSubgroupCheckAvailable();00132 00133 <span class="keywordflow">if</span> (fullValidate)00134 pass = pass && IsIdentity(gpc ? gpc->Exponentiate(GetGroupPrecomputation(), q) : ExponentiateElement(g, q));00135 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GetFieldType() == 1)00136 pass = pass && 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> &rng, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &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) && 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> &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> &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 &valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const</span>00207 <span class="keyword"></span>{00208 <span class="keywordflow">return</span> GetValueHelper<DL_GroupParameters<Element> >(<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> &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 &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 &a, <span class="keyword">const</span> Element &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 &element1, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &exponent1, <span class="keyword">const</span> Element &element2, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &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 + -
显示快捷键?