📄 eccrypto_8cpp-source.html
字号:
<a name="l00352"></a>00352 EcRecommendedParameters<ECP>(ASN1::secp521r1(),<a name="l00353"></a>00353 <span class="stringliteral">"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"</span>,<a name="l00354"></a>00354 <span class="stringliteral">"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC"</span>,<a name="l00355"></a>00355 <span class="stringliteral">"0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00"</span>,<a name="l00356"></a>00356 <span class="stringliteral">"0400C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650"</span>,<a name="l00357"></a>00357 <span class="stringliteral">"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409"</span>,<a name="l00358"></a>00358 1),<a name="l00359"></a>00359 };<a name="l00360"></a>00360 begin = rec;<a name="l00361"></a>00361 end = rec + <span class="keyword">sizeof</span>(rec)/<span class="keyword">sizeof</span>(rec[0]);<a name="l00362"></a>00362 }<a name="l00363"></a>00363 <a name="l00364"></a><a class="code" href="class_d_l___group_parameters___e_c.html#68ece1f5f650ac81aaeaa23a8431d832">00364</a> <span class="keyword">template</span> <<span class="keyword">class</span> EC> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> <a class="code" href="class_d_l___group_parameters___e_c.html#68ece1f5f650ac81aaeaa23a8431d832">DL_GroupParameters_EC<EC>::GetNextRecommendedParametersOID</a>(<span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &oid)<a name="l00365"></a>00365 {<a name="l00366"></a>00366 <span class="keyword">const</span> EcRecommendedParameters<EllipticCurve> *begin, *end;<a name="l00367"></a>00367 GetRecommendedParameters(begin, end);<a name="l00368"></a>00368 <span class="keyword">const</span> EcRecommendedParameters<EllipticCurve> *it = std::upper_bound(begin, end, oid, <a class="code" href="struct_o_i_d_less_than.html">OIDLessThan</a>());<a name="l00369"></a>00369 <span class="keywordflow">return</span> (it == end ? <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a>() : it->oid);<a name="l00370"></a>00370 }<a name="l00371"></a>00371 <a name="l00372"></a><a class="code" href="class_d_l___group_parameters___e_c.html#4fdb9f302a174b3bd9c299089b0dec50">00372</a> <span class="keyword">template</span> <<span class="keyword">class</span> EC> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html#d3bd5f1e41ae0ae5c673a7f9d96a00a8">DL_GroupParameters_EC<EC>::Initialize</a>(<span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &oid)<a name="l00373"></a>00373 {<a name="l00374"></a>00374 <span class="keyword">const</span> EcRecommendedParameters<EllipticCurve> *begin, *end;<a name="l00375"></a>00375 GetRecommendedParameters(begin, end);<a name="l00376"></a>00376 <span class="keyword">const</span> EcRecommendedParameters<EllipticCurve> *it = std::lower_bound(begin, end, oid, <a class="code" href="struct_o_i_d_less_than.html">OIDLessThan</a>());<a name="l00377"></a>00377 <span class="keywordflow">if</span> (it == end || it->oid != oid)<a name="l00378"></a>00378 <span class="keywordflow">throw</span> <a class="code" href="class_unknown_o_i_d.html">UnknownOID</a>();<a name="l00379"></a>00379 <a name="l00380"></a>00380 <span class="keyword">const</span> EcRecommendedParameters<EllipticCurve> &param = *it;<a name="l00381"></a>00381 <a class="code" href="class_d_l___group_parameters___e_c.html#566488b1e9819188a22ad1aa528faa6b">m_oid</a> = oid;<a name="l00382"></a>00382 std::auto_ptr<EllipticCurve> ec(param.NewEC());<a name="l00383"></a>00383 this-><a class="code" href="class_d_l___group_parameters_impl.html#9b4bc35a5e9a03d1ff075abefe8d045c">m_groupPrecomputation</a>.SetCurve(*ec);<a name="l00384"></a>00384 <a name="l00385"></a>00385 <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a> ssG(param.g, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html" title="Decode base 16 data back to bytes.">HexDecoder</a>);<a name="l00386"></a>00386 <a class="code" href="class_d_l___group_parameters___e_c.html#c191800038b554ba526b3f99062f06fc">Element</a> G;<a name="l00387"></a>00387 <span class="keywordtype">bool</span> result = <a class="code" href="class_d_l___group_parameters___e_c.html#1878b13f22da409ea562581823b6b5d2">GetCurve</a>().DecodePoint(G, ssG, (<span class="keywordtype">size_t</span>)ssG.<a class="code" href="class_buffered_transformation.html#30b2076bce5fb29e992b6457485c67c2" title="returns number of bytes that is currently ready for retrieval">MaxRetrievable</a>());<a name="l00388"></a>00388 <a class="code" href="class_d_l___group_parameters.html#1a1a563684f26dc72c212fb3d7b4173d">SetSubgroupGenerator</a>(G);<a name="l00389"></a>00389 assert(result);<a name="l00390"></a>00390 <a name="l00391"></a>00391 <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a> ssN(param.n, <span class="keyword">true</span>, <span class="keyword">new</span> HexDecoder);<a name="l00392"></a>00392 <a class="code" href="class_d_l___group_parameters___e_c.html#3cd786ca6b672329ed2ba33088504c65">m_n</a>.<a class="code" href="class_integer.html#e91fee9e9873f3412f47e6d647545099">Decode</a>(ssN, (<span class="keywordtype">size_t</span>)ssN.<a class="code" href="class_buffered_transformation.html#30b2076bce5fb29e992b6457485c67c2" title="returns number of bytes that is currently ready for retrieval">MaxRetrievable</a>());<a name="l00393"></a>00393 <a class="code" href="class_d_l___group_parameters___e_c.html#10fa06efdc59e48f437807c7445a8b0f">m_k</a> = param.h;<a name="l00394"></a>00394 }<a name="l00395"></a>00395 <a name="l00396"></a>00396 <span class="keyword">template</span> <<span class="keyword">class</span> EC><a name="l00397"></a><a class="code" href="class_d_l___group_parameters___e_c.html#e8d87127ad35ac8738e078069770d4fe">00397</a> <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___e_c.html#e8d87127ad35ac8738e078069770d4fe" title="to be implemented by derived classes, users should use one of the above functions...">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><a name="l00398"></a>00398 <span class="keyword"></span>{<a name="l00399"></a>00399 <span class="keywordflow">if</span> (strcmp(name, <a class="code" href="namespace_name.html#d2af5d57ed430435fef9d7ce575eedcb" title="OID.">Name::GroupOID</a>()) == 0)<a name="l00400"></a>00400 {<a name="l00401"></a>00401 <span class="keywordflow">if</span> (<a class="code" href="class_d_l___group_parameters___e_c.html#566488b1e9819188a22ad1aa528faa6b">m_oid</a>.<a class="code" href="class_o_i_d.html#93dfb8399e6a30832dc7eebd2e602997">m_values</a>.empty())<a name="l00402"></a>00402 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00403"></a>00403 <a name="l00404"></a>00404 this-><a class="code" href="class_name_value_pairs.html#a50a73b1705adb00ace9463b59696fb7" title="used by derived classes to check for type mismatch">ThrowIfTypeMismatch</a>(name, <span class="keyword">typeid</span>(<a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a>), valueType);<a name="l00405"></a>00405 *<span class="keyword">reinterpret_cast<</span>OID *<span class="keyword">></span>(pValue) = <a class="code" href="class_d_l___group_parameters___e_c.html#566488b1e9819188a22ad1aa528faa6b">m_oid</a>;<a name="l00406"></a>00406 <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00407"></a>00407 }<a name="l00408"></a>00408 <span class="keywordflow">else</span><a name="l00409"></a>00409 <span class="keywordflow">return</span> GetValueHelper<DL_GroupParameters<Element> >(<span class="keyword">this</span>, name, valueType, pValue).Assignable()<a name="l00410"></a>00410 CRYPTOPP_GET_FUNCTION_ENTRY(Curve);<a name="l00411"></a>00411 }<a name="l00412"></a>00412 <a name="l00413"></a>00413 <span class="keyword">template</span> <<span class="keyword">class</span> EC><a name="l00414"></a><a class="code" href="class_d_l___group_parameters___e_c.html#8fa1181ce7cf91f12ba6de286d1da5bd">00414</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html#8fa1181ce7cf91f12ba6de286d1da5bd" title="assign values from source to this object">DL_GroupParameters_EC<EC>::AssignFrom</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> &source)<a name="l00415"></a>00415 {<a name="l00416"></a>00416 <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> oid;<a name="l00417"></a>00417 <span class="keywordflow">if</span> (source.<a class="code" href="class_name_value_pairs.html#96686e9f8d6ce3ab870e516fb72b608e" title="get a named value, returns true if the name exists">GetValue</a>(<a class="code" href="namespace_name.html#d2af5d57ed430435fef9d7ce575eedcb" title="OID.">Name::GroupOID</a>(), oid))<a name="l00418"></a>00418 <a class="code" href="class_d_l___group_parameters___e_c.html#d3bd5f1e41ae0ae5c673a7f9d96a00a8">Initialize</a>(oid);<a name="l00419"></a>00419 <span class="keywordflow">else</span><a name="l00420"></a>00420 {<a name="l00421"></a>00421 <a class="code" href="class_d_l___group_parameters___e_c.html#27859965835a0eb8cf55959e666d64dd">EllipticCurve</a> ec;<a name="l00422"></a>00422 <a class="code" href="class_d_l___group_parameters___e_c.html#cae8a55704e14fbbd58cfd2766ef2cf3">Point</a> G;<a name="l00423"></a>00423 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> n;<a name="l00424"></a>00424 <a name="l00425"></a>00425 source.<a class="code" href="class_name_value_pairs.html#c66048d3bc2a741712486d02e1f75d78">GetRequiredParameter</a>(<span class="stringliteral">"DL_GroupParameters_EC<EC>"</span>, <a class="code" href="namespace_name.html#9d06f883342ab6c9f15fc9c2ce5f9a92" title="ECP or EC2N.">Name::Curve</a>(), ec);<a name="l00426"></a>00426 source.<a class="code" href="class_name_value_pairs.html#c66048d3bc2a741712486d02e1f75d78">GetRequiredParameter</a>(<span class="stringliteral">"DL_GroupParameters_EC<EC>"</span>, <a class="code" href="namespace_name.html#0cfc362921ffb9f47ca495f6ed9fb6e0" title="Integer, ECP::Point, or EC2N::Point.">Name::SubgroupGenerator</a>(), G);<a name="l00427"></a>00427 source.<a class="code" href="class_name_value_pairs.html#c66048d3bc2a741712486d02e1f75d78">GetRequiredParameter</a>(<span class="stringliteral">"DL_GroupParameters_EC<EC>"</span>, <a class="code" href="namespace_name.html#888cb347b5762b9b0fa41f21945b4699" title="Integer.">Name::SubgroupOrder</a>(), n);<a name="l00428"></a>00428 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> k = source.<a class="code" href="class_name_value_pairs.html#943b2009297783f1c35bae46efc3b5f7" title="get a named value, returns the default if the name doesn't exist">GetValueWithDefault</a>(<a class="code" href="namespace_name.html#e108af3abaaf25ada33592ac54456f4f" title="Integer.">Name::Cofactor</a>(), <a class="code" href="class_integer.html#19b7e6d48b1b57bd4846160ea2928175" title="avoid calling constructors for these frequently used integers">Integer::Zero</a>());<a name="l00429"></a>00429 <a name="l00430"></a>00430 <a class="code" href="class_d_l___group_parameters___e_c.html#d3bd5f1e41ae0ae5c673a7f9d96a00a8">Initialize</a>(ec, G, n, k);<a name="l00431"></a>00431 }<a name="l00432"></a>00432 }<a name="l00433"></a>00433 <a name="l00434"></a>00434 <span class="keyword">template</span> <<span class="keyword">class</span> EC><a name="l00435"></a><a class="code" href="class_d_l___group_parameters___e_c.html#519a33d073fe5bf2f278a0de75a404ab">00435</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html#519a33d073fe5bf2f278a0de75a404ab" title="this implementation doesn't actually generate a curve, it just initializes the parameters...">DL_GroupParameters_EC<EC>::GenerateRandom</a>(<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="l00436"></a>00436 {<a name="l00437"></a>00437 <span class="keywordflow">try</span><a name="l00438"></a>00438 {<a name="l00439"></a>00439 <a class="code" href="class_d_l___group_parameters___e_c.html#8fa1181ce7cf91f12ba6de286d1da5bd" title="assign values from source to this object">AssignFrom</a>(alg);<a name="l00440"></a>00440 }<a name="l00441"></a>00441 <span class="keywordflow">catch</span> (<a class="code" href="class_invalid_argument.html" title="exception thrown when an invalid argument is detected">InvalidArgument</a> &)<a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -