📄 eccrypto_8cpp-source.html
字号:
00518 pass = pass && m_n>4*qSqrt;00519 pass = pass && VerifyPrime(rng, m_n, level-2);00520 pass = pass && (m_k.<a class="code" href="class_integer.html#_integerz41_8">IsZero</a>() || m_k == (q+2*qSqrt+1)/m_n);00521 pass = pass && CheckMOVCondition(q, m_n);00522 }00523 00524 <span class="keywordflow">return</span> pass;00525 }00526 00527 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00528 <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::ValidateElement</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level, <span class="keyword">const</span> Element &g, <span class="keyword">const</span> DL_FixedBasePrecomputation<Element> *gpc)<span class="keyword"> const</span>00529 <span class="keyword"></span>{00530 <span class="keywordtype">bool</span> pass = !IsIdentity(g) && GetCurve().VerifyPoint(g);00531 <span class="keywordflow">if</span> (level >= 1)00532 {00533 <span class="keywordflow">if</span> (gpc)00534 pass = pass && gpc->Exponentiate(GetGroupPrecomputation(), Integer::One()) == g;00535 }00536 <span class="keywordflow">if</span> (level >= 2)00537 {00538 <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &q = GetSubgroupOrder();00539 pass = pass && IsIdentity(gpc ? gpc->Exponentiate(GetGroupPrecomputation(), q) : ExponentiateElement(g, q));00540 }00541 <span class="keywordflow">return</span> pass;00542 }00543 00544 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00545 <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::SimultaneousExponentiate</a>(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>00546 <span class="keyword"></span>{00547 GetCurve().SimultaneousMultiply(results, base, exponents, exponentsCount);00548 }00549 00550 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00551 CPP_TYPENAME <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC></a>::Element <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::MultiplyElements</a>(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00552 <span class="keyword"></span>{00553 <span class="keywordflow">return</span> GetCurve().Add(a, b);00554 }00555 00556 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00557 CPP_TYPENAME <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC></a>::Element <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::CascadeExponentiate</a>(<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>00558 <span class="keyword"></span>{00559 <span class="keywordflow">return</span> GetCurve().CascadeMultiply(exponent1, element1, exponent2, element2);00560 }00561 00562 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00563 OID <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<EC>::GetAlgorithmID</a>()<span class="keyword"> const</span>00564 <span class="keyword"></span>{00565 <span class="keywordflow">return</span> ASN1::id_ecPublicKey();00566 }00567 00568 <span class="comment">// ******************************************************************</span>00569 00570 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00571 <span class="keywordtype">void</span> <a class="code" href="class_d_l___public_key___e_c.html">DL_PublicKey_EC<EC>::BERDecodeKey2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt, <span class="keywordtype">bool</span> parametersPresent, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)00572 {00573 <span class="keyword">typename</span> EC::Point P;00574 <span class="keywordflow">if</span> (!GetGroupParameters().GetCurve().DecodePoint(P, bt, size))00575 BERDecodeError();00576 SetPublicElement(P);00577 }00578 00579 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00580 <span class="keywordtype">void</span> <a class="code" href="class_d_l___public_key___e_c.html">DL_PublicKey_EC<EC>::DEREncodeKey</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)<span class="keyword"> const</span>00581 <span class="keyword"></span>{00582 GetGroupParameters().GetCurve().EncodePoint(bt, GetPublicElement(), GetGroupParameters().GetPointCompression());00583 }00584 00585 <span class="comment">// ******************************************************************</span>00586 00587 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00588 <span class="keywordtype">void</span> <a class="code" href="class_d_l___private_key___e_c.html">DL_PrivateKey_EC<EC>::BERDecodeKey2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt, <span class="keywordtype">bool</span> parametersPresent, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)00589 {00590 <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> seq(bt);00591 word32 version;00592 BERDecodeUnsigned<word32>(seq, version, INTEGER, 1, 1); <span class="comment">// check version</span>00593 00594 <a class="code" href="class_b_e_r_general_decoder.html">BERGeneralDecoder</a> dec(seq, OCTET_STRING);00595 <span class="keywordflow">if</span> (!dec.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera2">IsDefiniteLength</a>())00596 BERDecodeError();00597 <a class="code" href="class_integer.html">Integer</a> x;00598 x.Decode(dec, dec.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera3">RemainingLength</a>());00599 dec.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00600 <span class="keywordflow">if</span> (!parametersPresent && seq.PeekByte() != (CONTEXT_SPECIFIC | CONSTRUCTED | 0))00601 BERDecodeError();00602 <span class="keywordflow">if</span> (!seq.EndReached() && seq.PeekByte() == (CONTEXT_SPECIFIC | CONSTRUCTED | 0))00603 {00604 <a class="code" href="class_b_e_r_general_decoder.html">BERGeneralDecoder</a> parameters(seq, CONTEXT_SPECIFIC | CONSTRUCTED | 0);00605 AccessGroupParameters().BERDecode(parameters);00606 parameters.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00607 }00608 <span class="keywordflow">if</span> (!seq.EndReached())00609 {00610 <span class="comment">// skip over the public element</span>00611 <a class="code" href="class_sec_block.html">SecByteBlock</a> subjectPublicKey;00612 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> unusedBits;00613 <a class="code" href="class_b_e_r_general_decoder.html">BERGeneralDecoder</a> publicKey(seq, CONTEXT_SPECIFIC | CONSTRUCTED | 1);00614 BERDecodeBitString(publicKey, subjectPublicKey, unusedBits);00615 publicKey.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00616 Element Q;00617 <span class="keywordflow">if</span> (!(unusedBits == 0 && GetGroupParameters().GetCurve().DecodePoint(Q, subjectPublicKey, subjectPublicKey.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>())))00618 BERDecodeError();00619 }00620 seq.MessageEnd();00621 00622 SetPrivateExponent(x);00623 }00624 00625 <span class="keyword">template</span> <<span class="keyword">class</span> EC>00626 <span class="keywordtype">void</span> <a class="code" href="class_d_l___private_key___e_c.html">DL_PrivateKey_EC<EC>::DEREncodeKey</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)<span class="keyword"> const</span>00627 <span class="keyword"></span>{00628 <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> privateKey(bt);00629 DEREncodeUnsigned<word32>(privateKey, 1); <span class="comment">// version</span>00630 <span class="comment">// SEC 1 ver 1.0 says privateKey (m_d) has the same length as order of the curve</span>00631 <span class="comment">// this will be changed to order of base point in a future version</span>00632 GetPrivateExponent().DEREncodeAsOctetString(privateKey, GetGroupParameters().GetSubgroupOrder().ByteCount());00633 privateKey.MessageEnd();00634 }00635 00636 NAMESPACE_END00637 00638 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:13 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -