📄 luc_8cpp-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>Crypto++: luc.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"><link href="tabs.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.5.2 --><div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="classes.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul></div><div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul></div><h1>luc.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// luc.cpp - written and placed in the public domain by Wei Dai</span><a name="l00002"></a>00002 <a name="l00003"></a>00003 <span class="preprocessor">#include "pch.h"</span><a name="l00004"></a>00004 <span class="preprocessor">#include "<a class="code" href="luc_8h.html">luc.h</a>"</span><a name="l00005"></a>00005 <span class="preprocessor">#include "asn.h"</span><a name="l00006"></a>00006 <span class="preprocessor">#include "nbtheory.h"</span><a name="l00007"></a>00007 <span class="preprocessor">#include "sha.h"</span><a name="l00008"></a>00008 <span class="preprocessor">#include "algparam.h"</span><a name="l00009"></a>00009 <a name="l00010"></a>00010 NAMESPACE_BEGIN(CryptoPP)<a name="l00011"></a>00011 <a name="l00012"></a>00012 void LUC_TestInstantiations()<a name="l00013"></a>00013 {<a name="l00014"></a>00014 <a class="code" href="struct_l_u_c___h_m_p.html" title="LUC-HMP, based on "Digital signature schemes based on Lucas functions" by Patrick...">LUC_HMP<SHA>::Signer</a> t1;<a name="l00015"></a>00015 <a class="code" href="class_l_u_c_function.html" title="The LUC function.">LUCFunction</a> t2;<a name="l00016"></a>00016 <a class="code" href="class_invertible_l_u_c_function.html" title="_">InvertibleLUCFunction</a> t3;<a name="l00017"></a>00017 }<a name="l00018"></a>00018 <a name="l00019"></a><a class="code" href="class_d_l___algorithm___l_u_c___h_m_p.html#ab3a5616ec9540d6dad86dce3e3c2d10">00019</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___algorithm___l_u_c___h_m_p.html#ab3a5616ec9540d6dad86dce3e3c2d10">DL_Algorithm_LUC_HMP::Sign</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html" title="interface for DL group parameters">DL_GroupParameters<Integer></a> &params, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &x, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &k, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &e, <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &r, <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &s)<span class="keyword"> const</span><a name="l00020"></a>00020 <span class="keyword"></span>{<a name="l00021"></a>00021 <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &q = params.<a class="code" href="class_d_l___group_parameters.html#3555cec872358c0f314a375f56119c99">GetSubgroupOrder</a>();<a name="l00022"></a>00022 r = params.<a class="code" href="class_d_l___group_parameters.html#a49341ced39e6ce13f00eae0c2faad87">ExponentiateBase</a>(k);<a name="l00023"></a>00023 s = (k + x*(r+e)) % q;<a name="l00024"></a>00024 }<a name="l00025"></a>00025 <a name="l00026"></a><a class="code" href="class_d_l___algorithm___l_u_c___h_m_p.html#ec08299059b87d523d590d5cfa4d0f2d">00026</a> <span class="keywordtype">bool</span> <a class="code" href="class_d_l___algorithm___l_u_c___h_m_p.html#ec08299059b87d523d590d5cfa4d0f2d">DL_Algorithm_LUC_HMP::Verify</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html" title="interface for DL group parameters">DL_GroupParameters<Integer></a> &params, <span class="keyword">const</span> <a class="code" href="class_d_l___public_key.html" title="interface for DL public keys">DL_PublicKey<Integer></a> &publicKey, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &e, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &r, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &s)<span class="keyword"> const</span><a name="l00027"></a>00027 <span class="keyword"></span>{<a name="l00028"></a>00028 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> p = params.<a class="code" href="class_d_l___group_parameters.html#5b8ca75b306fa0d41821ef276e876c1c">GetGroupOrder</a>()-1;<a name="l00029"></a>00029 <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &q = params.<a class="code" href="class_d_l___group_parameters.html#3555cec872358c0f314a375f56119c99">GetSubgroupOrder</a>();<a name="l00030"></a>00030 <a name="l00031"></a>00031 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> Vsg = params.<a class="code" href="class_d_l___group_parameters.html#a49341ced39e6ce13f00eae0c2faad87">ExponentiateBase</a>(s);<a name="l00032"></a>00032 <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> Vry = publicKey.<a class="code" href="class_d_l___public_key.html#c4e840699a7918a90d72c03cd2b47bc3">ExponentiatePublicElement</a>((r+e)%q);<a name="l00033"></a>00033 <span class="keywordflow">return</span> (Vsg*Vsg + Vry*Vry + r*r) % p == (Vsg * Vry * r + 4) % p;<a name="l00034"></a>00034 }<a name="l00035"></a>00035 <a name="l00036"></a><a class="code" href="class_d_l___base_precomputation___l_u_c.html#fae3f21615a2df17ecd5e204aeb3ac75">00036</a> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> <a class="code" href="class_d_l___base_precomputation___l_u_c.html#fae3f21615a2df17ecd5e204aeb3ac75">DL_BasePrecomputation_LUC::Exponentiate</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation<Element></a> &group, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &exponent)<span class="keyword"> const</span><a name="l00037"></a>00037 <span class="keyword"></span>{<a name="l00038"></a>00038 <span class="keywordflow">return</span> Lucas(exponent, m_g, static_cast<const DL_GroupPrecomputation_LUC &>(group).GetModulus());<a name="l00039"></a>00039 }<a name="l00040"></a>00040 <a name="l00041"></a><a class="code" href="class_d_l___group_parameters___l_u_c.html#21a11871ed32c03b08cc9821fae71145">00041</a> <span class="keywordtype">void</span> <a class="code" href="class_d_l___group_parameters___l_u_c.html#21a11871ed32c03b08cc9821fae71145">DL_GroupParameters_LUC::SimultaneousExponentiate</a>(<a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> *results, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> &base, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> *exponents, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exponentsCount)<span class="keyword"> const</span><a name="l00042"></a>00042 <span class="keyword"></span>{<a name="l00043"></a>00043 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<exponentsCount; i++)<a name="l00044"></a>00044 results[i] = Lucas(exponents[i], base, <a class="code" href="class_d_l___group_parameters___integer_based_impl.html#2c3b85d7565e222bb5492ae7d141ec85">GetModulus</a>());<a name="l00045"></a>00045 }<a name="l00046"></a>00046 <a name="l00047"></a><a class="code" href="class_l_u_c_function.html#4250f047087d8c74ac2a2faf887b6155">00047</a> <span class="keywordtype">void</span> <a class="code" href="class_l_u_c_function.html#4250f047087d8c74ac2a2faf887b6155">LUCFunction::BERDecode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt)<a name="l00048"></a>00048 {<a name="l00049"></a>00049 <a class="code" href="class_b_e_r_sequence_decoder.html" title="BER Sequence Decoder.">BERSequenceDecoder</a> seq(bt);<a name="l00050"></a>00050 <a class="code" href="class_l_u_c_function.html#41b10646a07c3aacb8a444f83d39019a">m_n</a>.<a class="code" href="class_integer.html#810fc0382f8928893fe192ab79b1972c">BERDecode</a>(seq);<a name="l00051"></a>00051 <a class="code" href="class_l_u_c_function.html#aa3b521dfa4f330a1334e1ba6673a178">m_e</a>.<a class="code" href="class_integer.html#810fc0382f8928893fe192ab79b1972c">BERDecode</a>(seq);<a name="l00052"></a>00052 seq.<a class="code" href="class_b_e_r_general_decoder.html#40b14625c98ac7febb8ca218d02358ad">MessageEnd</a>();<a name="l00053"></a>00053 }<a name="l00054"></a>00054 <a name="l00055"></a><a class="code" href="class_l_u_c_function.html#fa7df489909cf058186606b2ac515e31">00055</a> <span class="keywordtype">void</span> <a class="code" href="class_l_u_c_function.html#fa7df489909cf058186606b2ac515e31">LUCFunction::DEREncode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt)<span class="keyword"> const</span><a name="l00056"></a>00056 <span class="keyword"></span>{<a name="l00057"></a>00057 <a class="code" href="class_d_e_r_sequence_encoder.html" title="DER Sequence Encoder.">DERSequenceEncoder</a> seq(bt);<a name="l00058"></a>00058 <a class="code" href="class_l_u_c_function.html#41b10646a07c3aacb8a444f83d39019a">m_n</a>.<a class="code" href="class_integer.html#6ab51a05bee88cfa690179611e8a084e" title="encode using Distinguished Encoding Rules, put result into a BufferedTransformation...">DEREncode</a>(seq);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -