📄 eccrypto_8h-source.html
字号:
<a name="l00057"></a>00057 <span class="comment"> //! this implementation doesn't actually generate a curve, it just initializes the parameters with existing values</span><a name="l00058"></a>00058 <span class="comment"></span><span class="comment"> /*! parameters: (Curve, SubgroupGenerator, SubgroupOrder, Cofactor (optional)), or (GroupOID) */</span><a name="l00059"></a>00059 <span class="keywordtype">void</span> GenerateRandom(<a class="code" href="class_random_number_generator.html" title="interface for random number generators">RandomNumberGenerator</a> &rng, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> &alg);<a name="l00060"></a>00060 <a name="l00061"></a>00061 <span class="comment">// DL_GroupParameters</span><a name="l00062"></a><a class="code" href="class_d_l___group_parameters___e_c.html#a1f2c63b588afbfda789194704e68337">00062</a> <span class="keyword">const</span> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation<Element></a> & GetBasePrecomputation()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->m_gpc;}<a name="l00063"></a><a class="code" href="class_d_l___group_parameters___e_c.html#265ae70adae244ace472ef7f97052eda">00063</a> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation<Element></a> & AccessBasePrecomputation() {<span class="keywordflow">return</span> this->m_gpc;}<a name="l00064"></a><a class="code" href="class_d_l___group_parameters___e_c.html#731bcb118762c4147d093aff4a1c16ff">00064</a> <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> & GetSubgroupOrder()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_n;}<a name="l00065"></a>00065 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> GetCofactor() <span class="keyword">const</span>;<a name="l00066"></a>00066 <span class="keywordtype">bool</span> ValidateGroup(<a class="code" href="class_random_number_generator.html" title="interface for random number generators">RandomNumberGenerator</a> &rng, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level) <span class="keyword">const</span>;<a name="l00067"></a>00067 <span class="keywordtype">bool</span> ValidateElement(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level, <span class="keyword">const</span> Element &element, <span class="keyword">const</span> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation<Element></a> *precomp) <span class="keyword">const</span>;<a name="l00068"></a><a class="code" href="class_d_l___group_parameters___e_c.html#57d1fdc7007be3a6bde69547adb95031">00068</a> <span class="keywordtype">bool</span> FastSubgroupCheckAvailable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}<a name="l00069"></a><a class="code" href="class_d_l___group_parameters___e_c.html#72d99ea33b6163de5cfc649ba8070bd9">00069</a> <span class="keywordtype">void</span> EncodeElement(<span class="keywordtype">bool</span> reversible, <span class="keyword">const</span> Element &element, byte *encoded)<span class="keyword"> const</span><a name="l00070"></a>00070 <span class="keyword"> </span>{<a name="l00071"></a>00071 <span class="keywordflow">if</span> (reversible)<a name="l00072"></a>00072 GetCurve().EncodePoint(encoded, element, m_compress);<a name="l00073"></a>00073 <span class="keywordflow">else</span><a name="l00074"></a>00074 element.x.Encode(encoded, GetEncodedElementSize(<span class="keyword">false</span>));<a name="l00075"></a>00075 }<a name="l00076"></a><a class="code" href="class_d_l___group_parameters___e_c.html#2e2088c9a44d830835b23cce686067df">00076</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetEncodedElementSize(<span class="keywordtype">bool</span> reversible)<span class="keyword"> const</span><a name="l00077"></a>00077 <span class="keyword"> </span>{<a name="l00078"></a>00078 <span class="keywordflow">if</span> (reversible)<a name="l00079"></a>00079 <span class="keywordflow">return</span> GetCurve().EncodedPointSize(m_compress);<a name="l00080"></a>00080 <span class="keywordflow">else</span><a name="l00081"></a>00081 <span class="keywordflow">return</span> GetCurve().GetField().MaxElementByteLength();<a name="l00082"></a>00082 }<a name="l00083"></a><a class="code" href="class_d_l___group_parameters___e_c.html#bb818f7defc3b7067bd30ea8e78ae453">00083</a> Element DecodeElement(<span class="keyword">const</span> byte *encoded, <span class="keywordtype">bool</span> checkForGroupMembership)<span class="keyword"> const</span><a name="l00084"></a>00084 <span class="keyword"> </span>{<a name="l00085"></a>00085 Point result;<a name="l00086"></a>00086 <span class="keywordflow">if</span> (!GetCurve().DecodePoint(result, encoded, GetEncodedElementSize(<span class="keyword">true</span>)))<a name="l00087"></a>00087 <span class="keywordflow">throw</span> <a class="code" href="class_d_l___bad_element.html" title="to be thrown by DecodeElement and AgreeWithStaticPrivateKey">DL_BadElement</a>();<a name="l00088"></a>00088 <span class="keywordflow">if</span> (checkForGroupMembership && !ValidateElement(1, result, NULL))<a name="l00089"></a>00089 <span class="keywordflow">throw</span> <a class="code" href="class_d_l___bad_element.html" title="to be thrown by DecodeElement and AgreeWithStaticPrivateKey">DL_BadElement</a>();<a name="l00090"></a>00090 <span class="keywordflow">return</span> result;<a name="l00091"></a>00091 }<a name="l00092"></a>00092 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> ConvertElementToInteger(<span class="keyword">const</span> Element &element) <span class="keyword">const</span>;<a name="l00093"></a><a class="code" href="class_d_l___group_parameters___e_c.html#c67b130705307b96d52154df07c3e110">00093</a> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> GetMaxExponent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetSubgroupOrder()-1;}<a name="l00094"></a><a class="code" href="class_d_l___group_parameters___e_c.html#3b5b5ca00a83b0a518efd6cc4c4ad1a0">00094</a> <span class="keywordtype">bool</span> IsIdentity(<span class="keyword">const</span> Element &element)<span class="keyword"> const </span>{<span class="keywordflow">return</span> element.identity;}<a name="l00095"></a>00095 <span class="keywordtype">void</span> SimultaneousExponentiate(Element *results, <span class="keyword">const</span> Element &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="l00096"></a><a class="code" href="class_d_l___group_parameters___e_c.html#69b7bf8aeb90c94cb5d59877ec295b45">00096</a> <span class="keyword">static</span> std::string CRYPTOPP_API StaticAlgorithmNamePrefix() {<span class="keywordflow">return</span> <span class="stringliteral">"EC"</span>;}<a name="l00097"></a>00097 <a name="l00098"></a>00098 <span class="comment">// ASN1Key</span><a name="l00099"></a>00099 <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> GetAlgorithmID() <span class="keyword">const</span>;<a name="l00100"></a>00100 <a name="l00101"></a>00101 <span class="comment">// used by MQV</span><a name="l00102"></a>00102 Element MultiplyElements(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b) <span class="keyword">const</span>;<a name="l00103"></a>00103 Element CascadeExponentiate(<span class="keyword">const</span> Element &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> Element &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="l00104"></a>00104 <a name="l00105"></a>00105 <span class="comment">// non-inherited</span><a name="l00106"></a>00106 <a name="l00107"></a>00107 <span class="comment">// enumerate OIDs for recommended parameters, use OID() to get first one</span><a name="l00108"></a>00108 <span class="keyword">static</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> CRYPTOPP_API GetNextRecommendedParametersOID(<span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &oid);<a name="l00109"></a>00109 <a name="l00110"></a>00110 <span class="keywordtype">void</span> BERDecode(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt);<a name="l00111"></a>00111 <span class="keywordtype">void</span> DEREncode(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt) <span class="keyword">const</span>;<a name="l00112"></a>00112 <a name="l00113"></a><a class="code" href="class_d_l___group_parameters___e_c.html#810ae195d94843707541f306c1a10854">00113</a> <span class="keywordtype">void</span> SetPointCompression(<span class="keywordtype">bool</span> compress) {m_compress = compress;}<a name="l00114"></a><a class="code" href="class_d_l___group_parameters___e_c.html#ba904d6e76c9984e1e6c05d9b05b4e04">00114</a> <span class="keywordtype">bool</span> GetPointCompression()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_compress;}<a name="l00115"></a>00115 <a name="l00116"></a><a class="code" href="class_d_l___group_parameters___e_c.html#f700b6b9ae38e3910836971653f616db">00116</a> <span class="keywordtype">void</span> SetEncodeAsOID(<span class="keywordtype">bool</span> encodeAsOID) {m_encodeAsOID = encodeAsOID;}<a name="l00117"></a><a class="code" href="class_d_l___group_parameters___e_c.html#79531b0e0d0cf8d414b894cd6266268c">00117</a> <span class="keywordtype">bool</span> GetEncodeAsOID()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_encodeAsOID;}<a name="l00118"></a>00118 <a name="l00119"></a><a class="code" href="class_d_l___group_parameters___e_c.html#1878b13f22da409ea562581823b6b5d2">00119</a> <span class="keyword">const</span> EllipticCurve& GetCurve()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->m_groupPrecomputation.GetCurve();}<a name="l00120"></a>00120 <a name="l00121"></a><a class="code" href="class_d_l___group_parameters___e_c.html#cb62f08de7d25cd3031b61800f72cb6d">00121</a> <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#22c25c181c409600aa2e4bf1067ac47a">operator==</a>(<span class="keyword">const</span> ThisClass &rhs)<span class="keyword"> const</span><a name="l00122"></a>00122 <span class="keyword"> </span>{<span class="keywordflow">return</span> this->m_groupPrecomputation.GetCurve() == rhs.<a class="code" href="class_d_l___group_parameters_impl.html#9b4bc35a5e9a03d1ff075abefe8d045c">m_groupPrecomputation</a>.GetCurve() && this->m_gpc.GetBase(this->m_groupPrecomputation) == rhs.<a class="code" href="class_d_l___group_parameters_impl.html#187f7e42228ffcfd25ce90c35b979561">m_gpc</a>.<a class="code" href="class_d_l___fixed_base_precomputation_impl.html#d1c683d28b19854e6c61cef0c7471f55">GetBase</a>(rhs.<a class="code" href="class_d_l___group_parameters_impl.html#9b4bc35a5e9a03d1ff075abefe8d045c">m_groupPrecomputation</a>);}<a name="l00123"></a>00123 <a name="l00124"></a>00124 <span class="preprocessor">#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY</span><a name="l00125"></a>00125 <span class="preprocessor"></span> <span class="keyword">const</span> Point& GetBasePoint()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetSubgroupGenerator();}<a name="l00126"></a>00126 <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a>& GetBasePointOrder()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetSubgroupOrder();}<a name="l00127"></a>00127 <span class="keywordtype">void</span> LoadRecommendedParameters(<span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &oid) {Initialize(oid);}<a name="l00128"></a>00128 <span class="preprocessor">#endif</span><a name="l00129"></a>00129 <span class="preprocessor"></span><a name="l00130"></a>00130 <span class="keyword">protected</span>:<a name="l00131"></a><a class="code" href="class_d_l___group_parameters___e_c.html#412c10203696291afdb22c7b2fee2112">00131</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> FieldElementLength()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetCurve().GetField().MaxElementByteLength();}<a name="l00132"></a><a class="code" href="class_d_l___group_parameters___e_c.html#1fdf067a11f32ac1616b437ced145d93">00132</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ExponentLength()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_n.ByteCount();}<a name="l00133"></a>00133
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -