📄 validat2_8cpp-source.html
字号:
00561 <a class="code" href="struct_e_c_i_e_s.html">ECIES<ECP></a>::Decryptor cpriv(GlobalRNG(), ASN1::secp192r1());00562 <a class="code" href="struct_e_c_i_e_s.html">ECIES<ECP></a>::Encryptor cpub(cpriv);00563 <a class="code" href="class_byte_queue.html">ByteQueue</a> bq;00564 cpriv.GetKey().DEREncode(bq);00565 cpub.AccessKey().AccessGroupParameters().SetEncodeAsOID(<span class="keyword">true</span>);00566 cpub.GetKey().DEREncode(bq);00567 <a class="code" href="struct_e_c_d_s_a.html">ECDSA<ECP, SHA></a>::Signer spriv(bq);00568 <a class="code" href="struct_e_c_d_s_a.html">ECDSA<ECP, SHA></a>::Verifier spub(bq);00569 <a class="code" href="struct_e_c_d_h.html">ECDH<ECP></a>::Domain ecdhc(ASN1::secp192r1());00570 <a class="code" href="struct_e_c_m_q_v.html">ECMQV<ECP></a>::Domain ecmqvc(ASN1::secp192r1());00571 00572 spriv.AccessKey().Precompute();00573 <a class="code" href="class_byte_queue.html">ByteQueue</a> queue;00574 spriv.AccessKey().SavePrecomputation(queue);00575 spriv.AccessKey().LoadPrecomputation(queue);00576 00577 <span class="keywordtype">bool</span> pass = SignatureValidate(spriv, spub);00578 cpub.AccessKey().Precompute();00579 cpriv.AccessKey().Precompute();00580 pass = CryptoSystemValidate(cpriv, cpub) && pass;00581 pass = SimpleKeyAgreementValidate(ecdhc) && pass;00582 pass = AuthenticatedKeyAgreementValidate(ecmqvc) && pass;00583 00584 cout << <span class="stringliteral">"Turning on point compression..."</span> << endl;00585 cpriv.AccessKey().AccessGroupParameters().SetPointCompression(<span class="keyword">true</span>);00586 cpub.AccessKey().AccessGroupParameters().SetPointCompression(<span class="keyword">true</span>);00587 ecdhc.AccessGroupParameters().SetPointCompression(<span class="keyword">true</span>);00588 ecmqvc.AccessGroupParameters().SetPointCompression(<span class="keyword">true</span>);00589 pass = CryptoSystemValidate(cpriv, cpub) && pass;00590 pass = SimpleKeyAgreementValidate(ecdhc) && pass;00591 pass = AuthenticatedKeyAgreementValidate(ecmqvc) && pass;00592 00593 cout << <span class="stringliteral">"Testing SEC 2 recommended curves..."</span> << endl;00594 <a class="code" href="class_o_i_d.html">OID</a> oid;00595 <span class="keywordflow">while</span> (!(oid = <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<ECP>::GetNextRecommendedParametersOID</a>(oid)).m_values.empty())00596 {00597 <a class="code" href="class_d_l___group_parameters___e_c.html">DL_GroupParameters_EC<ECP></a> params(oid);00598 <span class="keywordtype">bool</span> fail = !params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa1">Validate</a>(GlobalRNG(), 2);00599 cout << (fail ? <span class="stringliteral">"FAILED"</span> : <span class="stringliteral">"passed"</span>) << <span class="stringliteral">" "</span> << dec << params.<a class="code" href="class_d_l___group_parameters___e_c.html#_d_l___group_parameters___e_ca32">GetCurve</a>().GetField().MaxElementBitLength() << <span class="stringliteral">" bits"</span> << endl;00600 pass = pass && !fail;00601 }00602 00603 <span class="keywordflow">return</span> pass;00604 }00605 00606 <span class="keywordtype">bool</span> ValidateEC2N()00607 {00608 cout << <span class="stringliteral">"\nEC2N validation suite running...\n\n"</span>;00609 00610 <a class="code" href="struct_e_c_i_e_s.html">ECIES<EC2N></a>::Decryptor cpriv(GlobalRNG(), ASN1::sect193r1());00611 <a class="code" href="struct_e_c_i_e_s.html">ECIES<EC2N></a>::Encryptor cpub(cpriv);00612 <a class="code" href="class_byte_queue.html">ByteQueue</a> bq;00613 cpriv.DEREncode(bq);00614 cpub.AccessKey().AccessGroupParameters().SetEncodeAsOID(<span class="keyword">true</span>);00615 cpub.DEREncode(bq);00616 <a class="code" href="struct_e_c_d_s_a.html">ECDSA<EC2N, SHA></a>::Signer spriv(bq);00617 <a class="code" href="struct_e_c_d_s_a.html">ECDSA<EC2N, SHA></a>::Verifier spub(bq);00618 <a class="code" href="struct_e_c_d_h.html">ECDH<EC2N></a>::Domain ecdhc(ASN1::sect193r1());00619 <a class="code" href="struct_e_c_m_q_v.html">ECMQV<EC2N></a>::Domain ecmqvc(ASN1::sect193r1());00620 00621 spriv.AccessKey().Precompute();00622 <a class="code" href="class_byte_queue.html">ByteQueue</a> queue;00623 spriv.AccessKey().SavePrecomputation(queue);00624 spriv.AccessKey().LoadPrecomputation(queue);00625 00626 <span class="keywordtype">bool</span> pass = SignatureValidate(spriv, spub);00627 pass = CryptoSystemValidate(cpriv, cpub) && pass;00628 pass = SimpleKeyAgreementValidate(ecdhc) && pass;00629 pass = AuthenticatedKeyAgreementValidate(ecmqvc) && pass;00630 00631 cout << <span class="stringliteral">"Turning on point compression..."</span> << endl;00632 cpriv.AccessKey().AccessGroupParameters().SetPointCompression(<span class="keyword">true</span>);00633 cpub.AccessKey().AccessGroupParameters().SetPointCompression(<span class="keyword">true</span>);00634 ecdhc.AccessGroupParameters().SetPointCompression(<span class="keyword">true</span>);00635 ecmqvc.AccessGroupParameters().SetPointCompression(<span class="keyword">true</span>);00636 pass = CryptoSystemValidate(cpriv, cpub) && pass;00637 pass = SimpleKeyAgreementValidate(ecdhc) && pass;00638 pass = AuthenticatedKeyAgreementValidate(ecmqvc) && pass;00639 00640 <span class="preprocessor">#if 0 // TODO: turn this back on when I make EC2N faster for pentanomial basis</span>00641 <span class="preprocessor"></span> cout << <span class="stringliteral">"Testing SEC 2 recommended curves..."</span> << endl;00642 <a class="code" href="class_o_i_d.html">OID</a> oid;00643 <span class="keywordflow">while</span> (!(oid = ECParameters<EC2N>::GetNextRecommendedParametersOID(oid)).m_values.empty())00644 {00645 ECParameters<EC2N> params(oid);00646 <span class="keywordtype">bool</span> fail = !params.ValidateParameters(GlobalRNG());00647 cout << (fail ? <span class="stringliteral">"FAILED"</span> : <span class="stringliteral">"passed"</span>) << <span class="stringliteral">" "</span> << params.GetCurve().GetField().MaxElementBitLength() << <span class="stringliteral">" bits"</span> << endl;00648 pass = pass && !fail;00649 }00650 <span class="preprocessor">#endif</span>00651 <span class="preprocessor"></span>00652 <span class="keywordflow">return</span> pass;00653 }00654 00655 <span class="keywordtype">bool</span> ValidateECDSA()00656 {00657 cout << <span class="stringliteral">"\nECDSA validation suite running...\n\n"</span>;00658 00659 <span class="comment">// from Sample Test Vectors for P1363</span>00660 <a class="code" href="class_g_f2_n_t.html">GF2NT</a> gf2n(191, 9, 0);00661 byte a[]=<span class="stringliteral">"\x28\x66\x53\x7B\x67\x67\x52\x63\x6A\x68\xF5\x65\x54\xE1\x26\x40\x27\x6B\x64\x9E\xF7\x52\x62\x67"</span>;00662 byte b[]=<span class="stringliteral">"\x2E\x45\xEF\x57\x1F\x00\x78\x6F\x67\xB0\x08\x1B\x94\x95\xA3\xD9\x54\x62\xF5\xDE\x0A\xA1\x85\xEC"</span>;00663 <a class="code" href="class_e_c2_n.html">EC2N</a> ec(gf2n, <a class="code" href="class_polynomial_mod2.html">PolynomialMod2</a>(a,24), <a class="code" href="class_polynomial_mod2.html">PolynomialMod2</a>(b,24));00664 00665 <a class="code" href="struct_e_c2_n_point.html">EC2N::Point</a> P;00666 ec.<a class="code" href="class_e_c2_n.html#_e_c2_na15">DecodePoint</a>(P, (byte *)<span class="stringliteral">"\x04\x36\xB3\xDA\xF8\xA2\x32\x06\xF9\xC4\xF2\x99\xD7\xB2\x1A\x9C\x36\x91\x37\xF2\xC8\x4A\xE1\xAA\x0D"</span>00667 <span class="stringliteral">"\x76\x5B\xE7\x34\x33\xB3\xF9\x5E\x33\x29\x32\xE7\x0E\xA2\x45\xCA\x24\x18\xEA\x0E\xF9\x80\x18\xFB"</span>, ec.<a class="code" href="class_e_c2_n.html#_e_c2_na14">EncodedPointSize</a>());00668 <a class="code" href="class_integer.html">Integer</a> n(<span class="stringliteral">"40000000000000000000000004a20e90c39067c893bbb9a5H"</span>);00669 <a class="code" href="class_integer.html">Integer</a> d(<span class="stringliteral">"340562e1dda332f9d2aec168249b5696ee39d0ed4d03760fH"</span>);00670 <a class="code" href="struct_e_c2_n_point.html">EC2N::Point</a> Q(ec.<a class="code" href="class_e_c2_n.html#_e_c2_na10">Multiply</a>(d, P));00671 <a class="code" href="struct_e_c_d_s_a.html">ECDSA<EC2N, SHA></a>::Signer priv(ec, P, n, d);00672 <a class="code" href="struct_e_c_d_s_a.html">ECDSA<EC2N, SHA></a>::Verifier pub(priv);00673 00674 <a class="code" href="class_integer.html">Integer</a> h(<span class="stringliteral">"A9993E364706816ABA3E25717850C26C9CD0D89DH"</span>);00675 <a class="code" href="class_integer.html">Integer</a> k(<span class="stringliteral">"3eeace72b4919d991738d521879f787cb590aff8189d2b69H"</span>);00676 byte sig[]=<span class="stringliteral">"\x03\x8e\x5a\x11\xfb\x55\xe4\xc6\x54\x71\xdc\xd4\x99\x84\x52\xb1\xe0\x2d\x8a\xf7\x09\x9b\xb9\x30"</span>00677 <span class="stringliteral">"\x0c\x9a\x08\xc3\x44\x68\xc2\x44\xb4\xe5\xd6\xb2\x1b\x3c\x68\x36\x28\x07\x41\x60\x20\x32\x8b\x6e"</span>;00678 <a class="code" href="class_integer.html">Integer</a> r(sig, 24);00679 <a class="code" href="class_integer.html">Integer</a> s(sig+24, 24);00680 00681 <a class="code" href="class_integer.html">Integer</a> rOut, sOut;00682 <span class="keywordtype">bool</span> fail, pass=<span class="keyword">true</span>;00683 00684 priv.GetDigestSignatureScheme().RawSign(k, h, rOut, sOut);00685 fail = (rOut != r) || (sOut != s);00686 pass = pass && !fail;00687 00688 cout << (fail ? <span class="stringliteral">"FAILED "</span> : <span class="stringliteral">"passed "</span>);00689 cout << <span class="stringliteral">"signature check against test vector\n"</span>;00690 00691 fail = !pub.VerifyMessage((byte *)<span class="stringliteral">"abc"</span>, 3, sig);00692 pass = pass && !fail;00693 00694 cout << (fail ? <span class="stringliteral">"FAILED "</span> : <span class="stringliteral">"passed "</span>);00695 cout << <span class="stringliteral">"verification check against test vector\n"</span>;00696 00697 fail = pub.VerifyMessage((byte *)<span class="stringliteral">"xyz"</span>, 3, sig);00698 pass = pass && !fail;00699 00700 pass = SignatureValidate(priv, pub) && pass;00701 00702 <span class="keywordflow">return</span> pass;00703 }00704 00705 <span class="keywordtype">bool</span> ValidateESIGN()00706 {00707 cout << <span class="stringliteral">"\nESIGN validation suite running...\n\n"</span>;00708 00709 <span class="keywordtype">bool</span> pass = <span class="keyword">true</span>, fail;00710 00711 <span class="keyword">const</span> <span class="keywordtype">char</span> *plain = <span class="stringliteral">"test"</span>;00712 <span class="keyword">const</span> byte *signature = (byte *)00713 <span class="stringliteral">"\xA3\xE3\x20\x65\xDE\xDA\xE7\xEC\x05\xC1\xBF\xCD\x25\x79\x7D\x99\xCD\xD5\x73\x9D\x9D\xF3\xA4\xAA\x9A\xA4\x5A\xC8\x23\x3D\x0D\x37\xFE\xBC\x76\x3F\xF1\x84\xF6\x59"</span>00714 <span class="stringliteral">"\x14\x91\x4F\x0C\x34\x1B\xAE\x9A\x5C\x2E\x2E\x38\x08\x78\x77\xCB\xDC\x3C\x7E\xA0\x34\x44\x5B\x0F\x67\xD9\x35\x2A\x79\x47\x1A\x52\x37\x71\xDB\x12\x67\xC1\xB6\xC6"</span>00715 <span class="stringliteral">"\x66\x73\xB3\x40\x2E\xD6\xF2\x1A\x84\x0A\xB6\x7B\x0F\xEB\x8B\x88\xAB\x33\xDD\xE4\x83\x21\x90\x63\x2D\x51\x2A\xB1\x6F\xAB\xA7\x5C\xFD\x77\x99\xF2\xE1\xEF\x67\x1A"</span>00716 <span class="stringliteral">"\x74\x02\x37\x0E\xED\x0A\x06\xAD\xF4\x15\x65\xB8\xE1\xD1\x45\xAE\x39\x19\xB4\xFF\x5D\xF1\x45\x7B\xE0\xFE\x72\xED\x11\x92\x8F\x61\x41\x4F\x02\x00\xF2\x76\x6F\x7C"</span>00717 <span class="stringliteral">"\x79\xA2\xE5\x52\x20\x5D\x97\x5E\xFE\x39\xAE\x21\x10\xFB\x35\xF4\x80\x81\x41\x13\xDD\xE8\x5F\xCA\x1E\x4F\xF8\x9B\xB2\x68\xFB\x28"</span>;00718 00719 <a class="code" href="class_file_source.html">FileSource</a> keys(<span class="stringliteral">"esig1536.dat"</span>, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>);00720 <a class="code" href="struct_e_s_i_g_n.html">ESIGN<SHA></a>::Signer signer(keys);00721 <a class="code" href="struct_e_s_i_g_n.html">ESIGN<SHA></a>::Verifier verifier(signer);00722 00723 fail = !SignatureValidate(signer, verifier);00724 pass = pass && !fail;00725 00726 fail = !verifier.VerifyMessage((byte *)plain, strlen(plain), signature);00727 pass = pass && !fail;00728 00729 cout << (fail ? <span class="stringliteral">"FAILED "</span> : <span class="stringliteral">"passed "</span>);00730 cout << <span class="stringliteral">"verification check against test vector\n"</span>;00731 00732 cout << <span class="stringliteral">"Generating signature key from seed..."</span> << endl;00733 <a class="code" href="class_invertible_e_s_i_g_n_function.html">InvertibleESIGNFunction</a> priv;00734 priv.<a class="code" href="class_invertible_e_s_i_g_n_function.html#_invertible_e_s_i_g_n_functiona8">GenerateRandom</a>(GlobalRNG(), MakeParameters(<span class="stringliteral">"Seed"</span>, <a class="code" href="class_const_byte_array_parameter.html">ConstByteArrayParameter</a>((<span class="keyword">const</span> byte *)<span class="stringliteral">"test"</span>, 4))(<span class="stringliteral">"KeySize"</span>, 3*512));00735 00736 fail = !SignatureValidate(signer, verifier);00737 pass = pass && !fail;00738 00739 <span class="keywordflow">return</span> pass;00740 }</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:27 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 + -