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

📄 eccrypto_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 5 页
字号:
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> &lt;<span class="keyword">class</span> EC&gt;<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&lt;EC&gt;::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>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&lt;OID *&gt;(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&lt;DL_GroupParameters&lt;Element&gt; &gt;(<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> &lt;<span class="keyword">class</span> EC&gt;<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&lt;EC&gt;::AssignFrom</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;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&lt;EC&gt;"</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&lt;EC&gt;"</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&lt;EC&gt;"</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> &lt;<span class="keyword">class</span> EC&gt;<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&lt;EC&gt;::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)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> &amp;)00437         {00438                 <span class="keywordflow">throw</span> <a class="code" href="class_not_implemented.html">NotImplemented</a>(<span class="stringliteral">"DL_GroupParameters_EC&lt;EC&gt;: curve generation is not implemented yet"</span>);00439         }00440 }00441 00442 <span class="keyword">template</span> &lt;<span class="keyword">class</span> EC&gt;00443 <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC&lt;EC&gt;::BERDecode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;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&lt;word32&gt;(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> &lt;<span class="keyword">class</span> EC&gt;00471 <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC&lt;EC&gt;::DEREncode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00472 <span class="keyword"></span>{00473         <span class="keywordflow">if</span> (m_encodeAsOID &amp;&amp; !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&lt;word32&gt;(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> &lt;<span class="keyword">class</span> EC&gt;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&lt;EC&gt;::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> &lt;<span class="keyword">class</span> EC&gt;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&lt;EC&gt;::ConvertElementToInteger</a>(<span class="keyword">const</span> Element &amp;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> &lt;<span class="keyword">class</span> EC&gt;00508 <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC&lt;EC&gt;::ValidateGroup</a>(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;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 &amp;&amp; m_n!=q;00514 00515         <span class="keywordflow">if</span> (level &gt;= 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 + -