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

📄 luc_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!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++: luc.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>luc.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// luc.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="luc_8h.html">luc.h</a>"</span>00005 <span class="preprocessor">#include "asn.h"</span>00006 <span class="preprocessor">#include "nbtheory.h"</span>00007 <span class="preprocessor">#include "sha.h"</span>00008 <span class="preprocessor">#include "algparam.h"</span>00009 00010 NAMESPACE_BEGIN(CryptoPP)00011 00012 <span class="keywordtype">void</span> LUC_TestInstantiations()00013 {00014         <a class="code" href="struct_l_u_c___h_m_p.html">LUC_HMP&lt;SHA&gt;</a>::Signer t1;00015         <a class="code" href="class_l_u_c_function.html">LUCFunction</a> t2;00016         <a class="code" href="class_invertible_l_u_c_function.html">InvertibleLUCFunction</a> t3;00017 }00018 00019 <span class="keywordtype">bool</span> DL_Algorithm_LUC_HMP::Sign(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html">DL_GroupParameters&lt;Integer&gt;</a> &amp;params, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;x, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;k, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e, <a class="code" href="class_integer.html">Integer</a> &amp;r, <a class="code" href="class_integer.html">Integer</a> &amp;s)<span class="keyword"> const</span>00020 <span class="keyword"></span>{00021         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;q = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa14">GetSubgroupOrder</a>();00022         r = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa9">ExponentiateBase</a>(k);00023         s = (k + x*(r+e)) % q;00024         <span class="keywordflow">return</span> <span class="keyword">true</span>;00025 }00026 00027 <span class="keywordtype">bool</span> DL_Algorithm_LUC_HMP::Verify(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html">DL_GroupParameters&lt;Integer&gt;</a> &amp;params, <span class="keyword">const</span> <a class="code" href="class_d_l___public_key.html">DL_PublicKey&lt;Integer&gt;</a> &amp;publicKey, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;r, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;s)<span class="keyword"> const</span>00028 <span class="keyword"></span>{00029         <a class="code" href="class_integer.html">Integer</a> p = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa16">GetGroupOrder</a>()-1;00030         <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;q = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa14">GetSubgroupOrder</a>();00031 00032         <a class="code" href="class_integer.html">Integer</a> Vsg = params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa9">ExponentiateBase</a>(s);00033         <a class="code" href="class_integer.html">Integer</a> Vry = publicKey.<a class="code" href="class_d_l___public_key.html#_d_l___public_keya4">ExponentiatePublicElement</a>((r+e)%q);00034         <span class="keywordflow">return</span> (Vsg*Vsg + Vry*Vry + r*r) % p == (Vsg * Vry * r + 4) % p;00035 }00036 00037 <a class="code" href="class_integer.html">Integer</a> DL_BasePrecomputation_LUC::Exponentiate(<span class="keyword">const</span> DL_GroupPrecomputation&lt;Element&gt; &amp;group, <span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;exponent)<span class="keyword"> const</span>00038 <span class="keyword"></span>{00039         <span class="keywordflow">return</span> Lucas(exponent, m_g, static_cast&lt;const DL_GroupPrecomputation_LUC &amp;&gt;(group).GetModulus());00040 }00041 00042 <span class="keywordtype">void</span> DL_GroupParameters_LUC::SimultaneousExponentiate(Element *results, <span class="keyword">const</span> Element &amp;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>00043 <span class="keyword"></span>{00044         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;exponentsCount; i++)00045                 results[i] = Lucas(exponents[i], base, GetModulus());00046 }00047 00048 <span class="keywordtype">void</span> LUCFunction::BERDecode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)00049 {00050         <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> seq(bt);00051         m_n.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00052         m_e.<a class="code" href="class_integer.html#_integerz39_9">BERDecode</a>(seq);00053         seq.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00054 }00055 00056 <span class="keywordtype">void</span> LUCFunction::DEREncode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00057 <span class="keyword"></span>{00058         <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> seq(bt);00059         m_n.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00060         m_e.<a class="code" href="class_integer.html#_integerz39_3">DEREncode</a>(seq);00061         seq.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00062 }00063 00064 <a class="code" href="class_integer.html">Integer</a> LUCFunction::ApplyFunction(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;x)<span class="keyword"> const</span>00065 <span class="keyword"></span>{00066         DoQuickSanityCheck();00067         <span class="keywordflow">return</span> Lucas(m_e, x, m_n);00068 }00069 <a name="l00070"></a><a class="code" href="class_l_u_c_function.html#_l_u_c_functiona6">00070</a> <span class="keywordtype">bool</span> <a class="code" href="class_l_u_c_function.html#_l_u_c_functiona6">LUCFunction::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>00071 <span class="keyword"></span>{00072         <span class="keywordtype">bool</span> pass = <span class="keyword">true</span>;00073         pass = pass &amp;&amp; m_n &gt; <a class="code" href="class_integer.html#_integerz37_11">Integer::One</a>() &amp;&amp; m_n.<a class="code" href="class_integer.html#_integerz41_15">IsOdd</a>();00074         pass = pass &amp;&amp; m_e &gt; <a class="code" href="class_integer.html#_integerz37_11">Integer::One</a>() &amp;&amp; m_e.<a class="code" href="class_integer.html#_integerz41_15">IsOdd</a>() &amp;&amp; m_e &lt; m_n;00075         <span class="keywordflow">return</span> pass;00076 }00077 <a name="l00078"></a><a class="code" href="class_l_u_c_function.html#_l_u_c_functiona7">00078</a> <span class="keywordtype">bool</span> <a class="code" href="class_l_u_c_function.html#_l_u_c_functiona7">LUCFunction::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>00079 <span class="keyword"></span>{00080         <span class="keywordflow">return</span> GetValueHelper(<span class="keyword">this</span>, name, valueType, pValue).Assignable()00081                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a15">Modulus</a>)00082                 CRYPTOPP_GET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a16">PublicExponent</a>)00083                 ;00084 }00085 <a name="l00086"></a><a class="code" href="class_l_u_c_function.html#_l_u_c_functiona8">00086</a> <span class="keywordtype">void</span> <a class="code" href="class_l_u_c_function.html#_l_u_c_functiona8">LUCFunction::AssignFrom</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source)00087 {00088         AssignFromHelper(<span class="keyword">this</span>, source)00089                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a15">Modulus</a>)00090                 CRYPTOPP_SET_FUNCTION_ENTRY(<a class="code" href="namespace_name.html#a16">PublicExponent</a>)00091                 ;00092 }00093 00094 <span class="comment">// *****************************************************************************</span>00095 <span class="comment">// private key operations:</span>00096 00097 <span class="keyword">class </span>LUCPrimeSelector : <span class="keyword">public</span> PrimeSelector00098 {00099 <span class="keyword">public</span>:00100         LUCPrimeSelector(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;e) : m_e(e) {}00101         <span class="keywordtype">bool</span> IsAcceptable(<span class="keyword">const</span> <a class="code" href="class_integer.html">Integer</a> &amp;candidate)<span class="keyword"> const</span>00102 <span class="keyword">        </span>{00103                 <span class="keywordflow">return</span> RelativelyPrime(m_e, candidate+1) &amp;&amp; RelativelyPrime(m_e, candidate-1);00104         }00105         <a class="code" href="class_integer.html">Integer</a> m_e;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -