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

📄 xtrcrypt_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Crypto++: xtrcrypt.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.2 --><div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Compound&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Compound&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div><h1>xtrcrypt.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// xtrcrypt.cpp - written and placed in the public domain by Wei Dai</span>00002 00003 <span class="preprocessor">#include "pch.h"</span>00004 <span class="preprocessor">#include "<a class="code" href="xtrcrypt_8h.html">xtrcrypt.h</a>"</span>00005 <span class="preprocessor">#include "nbtheory.h"</span>00006 <span class="preprocessor">#include "asn.h"</span>00007 <span class="preprocessor">#include "argnames.h"</span>00008 00009 NAMESPACE_BEGIN(CryptoPP)00010 00011 XTR_DH::XTR_DH(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;p, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;q, <span class="keyword">const</span> <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> &amp;g)00012         : m_p(p), m_q(q), m_g(g)00013 {00014 }00015 00016 XTR_DH::XTR_DH(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> pbits, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> qbits)00017 {00018         XTR_FindPrimesAndGenerator(rng, m_p, m_q, m_g, pbits, qbits);00019 }00020 00021 XTR_DH::XTR_DH(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)00022 {00023         <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> seq(bt);00024         m_p.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00025         m_q.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00026         m_g.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00027         m_g.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00028         seq.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00029 }00030 <a name="l00031"></a><a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha3">00031</a> <span class="keywordtype">void</span> <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha3">XTR_DH::DEREncode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00032 <span class="keyword"></span>{00033         <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> seq(bt);00034         m_p.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00035         m_q.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00036         m_g.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00037         m_g.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00038         seq.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00039 }00040 <a name="l00041"></a><a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha4">00041</a> <span class="keywordtype">bool</span> <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha4">XTR_DH::Validate</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>00042 <span class="keyword"></span>{00043         <span class="keywordtype">bool</span> pass = <span class="keyword">true</span>;00044         pass = pass &amp;&amp; m_p &gt; <a class="code" href="class_integer.html#_integerz37_11">Integer::One</a>() &amp;&amp; m_p.<a class="code" href="class_integer.html#_integerz41_15">IsOdd</a>();00045         pass = pass &amp;&amp; m_q &gt; <a class="code" href="class_integer.html#_integerz37_11">Integer::One</a>() &amp;&amp; m_q.<a class="code" href="class_integer.html#_integerz41_15">IsOdd</a>();00046         <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> three = <a class="code" href="class_g_f_p2___o_n_b.html">GFP2_ONB&lt;ModularArithmetic&gt;</a>(m_p).ConvertIn(3);00047         pass = pass &amp;&amp; !(m_g.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>.<a class="code" href="class_integer.html#_integerz41_10">IsNegative</a>() || m_g.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>.<a class="code" href="class_integer.html#_integerz41_10">IsNegative</a>() || m_g.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a> &gt;= m_p || m_g.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a> &gt;= m_p || m_g == three);00048         <span class="keywordflow">if</span> (level &gt;= 1)00049                 pass = pass &amp;&amp; ((m_p.<a class="code" href="class_integer.html#_integerz49_2">Squared</a>()-m_p+1)%m_q).IsZero();00050         <span class="keywordflow">if</span> (level &gt;= 2)00051         {00052                 pass = pass &amp;&amp; VerifyPrime(rng, m_p, level-2) &amp;&amp; VerifyPrime(rng, m_q, level-2);00053                 pass = pass &amp;&amp; XTR_Exponentiate(m_g, (m_p.<a class="code" href="class_integer.html#_integerz49_2">Squared</a>()-m_p+1)/m_q, m_p) != three;00054                 pass = pass &amp;&amp; XTR_Exponentiate(m_g, m_q, m_p) == three;00055         }00056         <span class="keywordflow">return</span> pass;00057 }00058 <a name="l00059"></a><a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha5">00059</a> <span class="keywordtype">bool</span> <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha5">XTR_DH::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>00060 <span class="keyword"></span>{00061         <span class="keywordflow">return</span> GetValueHelper(<span class="keyword">this</span>, name, valueType, pValue).Assignable()00062                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a15">Modulus</a>)00063                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a19">SubgroupOrder</a>)00064                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a21">SubgroupGenerator</a>)00065                 ;00066 }00067 <a name="l00068"></a><a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha6">00068</a> <span class="keywordtype">void</span> <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha6">XTR_DH::AssignFrom</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source)00069 {00070         AssignFromHelper(<span class="keyword">this</span>, source)00071                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a15">Modulus</a>)00072                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a19">SubgroupOrder</a>)00073                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a21">SubgroupGenerator</a>)00074                 ;00075 }00076 <a name="l00077"></a><a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha11">00077</a> <span class="keywordtype">void</span> <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha11">XTR_DH::GeneratePrivateKey</a>(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, byte *privateKey)<span class="keyword"> const</span>00078 <span class="keyword"></span>{00079         <a class="code" href="class_integer.html">Integer</a> x(rng, <a class="code" href="class_integer.html#_integerz37_10">Integer::Zero</a>(), m_q-1);00080         x.Encode(privateKey, <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha9">PrivateKeyLength</a>());00081 }00082 <a name="l00083"></a><a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha12">00083</a> <span class="keywordtype">void</span> <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha12">XTR_DH::GeneratePublicKey</a>(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> byte *privateKey, byte *publicKey)<span class="keyword"> const</span>00084 <span class="keyword"></span>{00085         <a class="code" href="class_integer.html">Integer</a> x(privateKey, <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha9">PrivateKeyLength</a>());00086         <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> y = XTR_Exponentiate(m_g, x, m_p);00087         y.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elementa3">Encode</a>(publicKey, <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha10">PublicKeyLength</a>());00088 }00089 <a name="l00090"></a><a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha13">00090</a> <span class="keywordtype">bool</span> <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha13">XTR_DH::Agree</a>(byte *agreedValue, <span class="keyword">const</span> byte *privateKey, <span class="keyword">const</span> byte *otherPublicKey, <span class="keywordtype">bool</span> validateOtherPublicKey)<span class="keyword"> const</span>00091 <span class="keyword"></span>{00092         <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> w(otherPublicKey, <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha10">PublicKeyLength</a>());00093         <span class="keywordflow">if</span> (validateOtherPublicKey)00094         {00095                 <a class="code" href="class_g_f_p2___o_n_b.html">GFP2_ONB&lt;ModularArithmetic&gt;</a> gfp2(m_p);00096                 <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> three = gfp2.<a class="code" href="class_g_f_p2___o_n_b.html#_g_f_p2___o_n_ba2">ConvertIn</a>(3);00097                 <span class="keywordflow">if</span> (w.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a>.<a class="code" href="class_integer.html#_integerz41_10">IsNegative</a>() || w.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a>.<a class="code" href="class_integer.html#_integerz41_10">IsNegative</a>() || w.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento0">c1</a> &gt;= m_p || w.<a class="code" href="class_g_f_p2_element.html#_g_f_p2_elemento1">c2</a> &gt;= m_p || w == three)00098                         <span class="keywordflow">return</span> <span class="keyword">false</span>;00099                 <span class="keywordflow">if</span> (XTR_Exponentiate(w, m_q, m_p) != three)00100                         <span class="keywordflow">return</span> <span class="keyword">false</span>;00101         }00102         <a class="code" href="class_integer.html">Integer</a> s(privateKey, <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha9">PrivateKeyLength</a>());00103         <a class="code" href="class_g_f_p2_element.html">GFP2Element</a> z = XTR_Exponentiate(w, s, m_p);00104         z.Encode(agreedValue, <a class="code" href="class_x_t_r___d_h.html#_x_t_r___d_ha8">AgreedValueLength</a>());00105         <span class="keywordflow">return</span> <span class="keyword">true</span>;00106 }00107 00108 NAMESPACE_END</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:28 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 + -