📄 eccrypto_8cpp-source.html
字号:
00387 m_n.Decode(ssN, ssN.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_0">MaxRetrievable</a>());00388 m_k = param.h;00389 }00390 00391 <span class="keyword">template</span> <<span class="keyword">class</span> EC><a name="l00392"></a><a class="code" href="class_d_l___group_parameters___e_c.html#_d_l___group_parameters___e_ca6">00392</a> <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___e_c.html#_d_l___group_parameters___e_ca6">DL_GroupParameters_EC<EC>::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>00393 <span class="keyword"></span>{00394 <span class="keywordflow">if</span> (strcmp(name, Name::GroupOID()) == 0)00395 {00396 <span class="keywordflow">if</span> (m_oid.<a class="code" href="class_o_i_d.html#_o_i_do0">m_values</a>.empty())00397 <span class="keywordflow">return</span> <span class="keyword">false</span>;00398 00399 <a class="code" href="class_name_value_pairs.html#_x_t_r___d_he0">ThrowIfTypeMismatch</a>(name, <span class="keyword">typeid</span>(OID), valueType);00400 *reinterpret_cast<OID *>(pValue) = m_oid;00401 <span class="keywordflow">return</span> <span class="keyword">true</span>;00402 }00403 <span class="keywordflow">else</span>00404 <span class="keywordflow">return</span> GetValueHelper<DL_GroupParameters<Element> >(<span class="keyword">this</span>, name, valueType, pValue).Assignable()00405 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a22">Curve</a>);00406 }00407 00408 <span class="keyword">template</span> <<span class="keyword">class</span> EC><a name="l00409"></a><a class="code" href="class_d_l___group_parameters___e_c.html#_d_l___group_parameters___e_ca7">00409</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html#_d_l___group_parameters___e_ca7">DL_GroupParameters_EC<EC>::AssignFrom</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &source)00410 {00411 OID oid;00412 <span class="keywordflow">if</span> (source.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(Name::GroupOID(), oid))00413 Initialize(oid);00414 <span class="keywordflow">else</span>00415 {00416 EllipticCurve ec;00417 Point G;00418 <a class="code" href="class_integer.html">Integer</a> n;00419 00420 source.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha44">GetRequiredParameter</a>(<span class="stringliteral">"DL_GroupParameters_EC<EC>"</span>, Name::Curve(), ec);00421 source.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha44">GetRequiredParameter</a>(<span class="stringliteral">"DL_GroupParameters_EC<EC>"</span>, Name::SubgroupGenerator(), G);00422 source.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha44">GetRequiredParameter</a>(<span class="stringliteral">"DL_GroupParameters_EC<EC>"</span>, Name::SubgroupOrder(), n);00423 <a class="code" href="class_integer.html">Integer</a> k = source.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(Name::Cofactor(), <a class="code" href="class_integer.html#_integerz37_10">Integer::Zero</a>());00424 00425 Initialize(ec, G, n, k);00426 }00427 }00428 00429 <span class="keyword">template</span> <<span class="keyword">class</span> EC><a name="l00430"></a><a class="code" href="class_d_l___group_parameters___e_c.html#_d_l___group_parameters___e_ca8">00430</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html#_d_l___group_parameters___e_ca8">DL_GroupParameters_EC<EC>::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)00431 {00432 <span class="keywordflow">try</span>00433 {00434 <a class="code" href="class_d_l___group_parameters___e_c.html#_d_l___group_parameters___e_ca7">AssignFrom</a>(alg);00435 }00436 <span class="keywordflow">catch</span> (<a class="code" href="class_invalid_argument.html">InvalidArgument</a> &)00437 {00438 <span class="keywordflow">throw</span> <a class="code" href="class_not_implemented.html">NotImplemented</a>(<span class="stringliteral">"DL_GroupParameters_EC<EC>: curve generation is not implemented yet"</span>);00439 }00440 }00441 00442 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00443 <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::BERDecode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)00444 {00445 byte b;00446 <span class="keywordflow">if</span> (!bt.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_4">Peek</a>(b))00447 BERDecodeError();00448 <span class="keywordflow">if</span> (b == OBJECT_IDENTIFIER)00449 Initialize(OID(bt));00450 <span class="keywordflow">else</span>00451 {00452 <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> seq(bt);00453 word32 version;00454 BERDecodeUnsigned<word32>(seq, version, INTEGER, 1, 1); <span class="comment">// check version</span>00455 EllipticCurve ec(seq);00456 Point G = ec.BERDecodePoint(seq);00457 <a class="code" href="class_integer.html">Integer</a> n(seq);00458 <a class="code" href="class_integer.html">Integer</a> k;00459 <span class="keywordtype">bool</span> cofactorPresent = !seq.EndReached();00460 <span class="keywordflow">if</span> (cofactorPresent)00461 k.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00462 <span class="keywordflow">else</span>00463 k = <a class="code" href="class_integer.html#_integerz37_10">Integer::Zero</a>();00464 seq.MessageEnd();00465 00466 Initialize(ec, G, n, k);00467 }00468 }00469 00470 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00471 <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::DEREncode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)<span class="keyword"> const</span>00472 <span class="keyword"></span>{00473 <span class="keywordflow">if</span> (m_encodeAsOID && !m_oid.<a class="code" href="class_o_i_d.html#_o_i_do0">m_values</a>.empty())00474 m_oid.<a class="code" href="class_o_i_d.html#_o_i_da4">DEREncode</a>(bt);00475 <span class="keywordflow">else</span>00476 {00477 <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> seq(bt);00478 DEREncodeUnsigned<word32>(seq, 1); <span class="comment">// version</span>00479 GetCurve().DEREncode(seq);00480 GetCurve().DEREncodePoint(seq, GetSubgroupGenerator(), m_compress);00481 m_n.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00482 <span class="keywordflow">if</span> (m_k.<a class="code" href="class_integer.html#_integerz41_9">NotZero</a>())00483 m_k.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00484 seq.MessageEnd();00485 }00486 }00487 00488 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00489 <a class="code" href="class_integer.html">Integer</a> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::GetCofactor</a>()<span class="keyword"> const</span>00490 <span class="keyword"></span>{00491 <span class="keywordflow">if</span> (!m_k)00492 {00493 <a class="code" href="class_integer.html">Integer</a> q = GetCurve().FieldSize();00494 <a class="code" href="class_integer.html">Integer</a> qSqrt = q.<a class="code" href="class_integer.html#_integerz49_3">SquareRoot</a>();00495 m_k = (q+2*qSqrt+1)/m_n;00496 }00497 00498 <span class="keywordflow">return</span> m_k;00499 }00500 00501 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00502 <a class="code" href="class_integer.html">Integer</a> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::ConvertElementToInteger</a>(<span class="keyword">const</span> Element &element)<span class="keyword"> const</span>00503 <span class="keyword"></span>{00504 <span class="keywordflow">return</span> ConvertToInteger(element.x);00505 };00506 00507 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00508 <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::ValidateGroup</a>(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level)<span class="keyword"> const</span>00509 <span class="keyword"></span>{00510 <span class="keywordtype">bool</span> pass = GetCurve().ValidateParameters(rng, level);00511 00512 <a class="code" href="class_integer.html">Integer</a> q = GetCurve().FieldSize();00513 pass = pass && m_n!=q;00514 00515 <span class="keywordflow">if</span> (level >= 2)00516 {00517 <a class="code" href="class_integer.html">Integer</a> qSqrt = q.<a class="code" href="class_integer.html#_integerz49_3">SquareRoot</a>();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -