📄 gfpcrypt_8h-source.html
字号:
<a name="l00051"></a>00051 <span class="keywordtype">bool</span> ValidateElement(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level, <span class="keyword">const</span> Integer &element, <span class="keyword">const</span> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation<Integer></a> *precomp) <span class="keyword">const</span>;<a name="l00052"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#c1cec62d442856c46c536e2ae1e0328a">00052</a> <span class="keywordtype">bool</span> FastSubgroupCheckAvailable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetCofactor() == 2;}<a name="l00053"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#9ceb27f7c51beae7116052ab6358d5e3">00053</a> <span class="keywordtype">void</span> EncodeElement(<span class="keywordtype">bool</span> reversible, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> &element, byte *encoded)<span class="keyword"> const</span><a name="l00054"></a>00054 <span class="keyword"> </span>{element.<a class="code" href="class_integer.html#c12ea467de9a609b86ec03d8cb8837e4" title="encode in big-endian format">Encode</a>(encoded, GetModulus().ByteCount());}<a name="l00055"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#9786b983ff7cd1f2152ebf8f319b777d">00055</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetEncodedElementSize(<span class="keywordtype">bool</span> reversible)<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetModulus().ByteCount();}<a name="l00056"></a>00056 Integer DecodeElement(<span class="keyword">const</span> byte *encoded, <span class="keywordtype">bool</span> checkForGroupMembership) <span class="keyword">const</span>;<a name="l00057"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#49f95d1c429bb4eda7b7ce59c9ac8289">00057</a> Integer ConvertElementToInteger(<span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a> &element)<span class="keyword"> const</span><a name="l00058"></a>00058 <span class="keyword"> </span>{<span class="keywordflow">return</span> element;}<a name="l00059"></a>00059 Integer GetMaxExponent() <span class="keyword">const</span>;<a name="l00060"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#c8aefa5fb1191a15136e1a5473900517">00060</a> <span class="keyword">static</span> std::string CRYPTOPP_API StaticAlgorithmNamePrefix() {<span class="keywordflow">return</span> <span class="stringliteral">""</span>;}<a name="l00061"></a>00061 <a name="l00062"></a>00062 <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> GetAlgorithmID() <span class="keyword">const</span>;<a name="l00063"></a>00063 <a name="l00064"></a>00064 <span class="keyword">virtual</span> <span class="keyword">const</span> Integer & GetModulus() <span class="keyword">const</span> =0;<a name="l00065"></a>00065 <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetModulusAndSubgroupGenerator(<span class="keyword">const</span> Integer &p, <span class="keyword">const</span> Integer &g) =0;<a name="l00066"></a>00066 <a name="l00067"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#5a842eff8fb870a0c9a61831a9865342">00067</a> <span class="keywordtype">void</span> SetSubgroupOrder(<span class="keyword">const</span> Integer &q)<a name="l00068"></a>00068 {m_q = q; ParametersChanged();}<a name="l00069"></a>00069 <a name="l00070"></a>00070 <span class="keyword">protected</span>:<a name="l00071"></a><a class="code" href="class_d_l___group_parameters___integer_based.html#05c2b65749d0357845599a7d434e3903">00071</a> Integer ComputeGroupOrder(<span class="keyword">const</span> Integer &modulus)<span class="keyword"> const</span><a name="l00072"></a>00072 <span class="keyword"> </span>{<span class="keywordflow">return</span> modulus-(GetFieldType() == 1 ? 1 : -1);}<a name="l00073"></a>00073 <a name="l00074"></a>00074 <span class="comment">// GF(p) = 1, GF(p^2) = 2</span><a name="l00075"></a>00075 <span class="keyword">virtual</span> <span class="keywordtype">int</span> GetFieldType() <span class="keyword">const</span> =0;<a name="l00076"></a>00076 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetDefaultSubgroupOrderSize(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modulusSize) <span class="keyword">const</span>;<a name="l00077"></a>00077 <a name="l00078"></a>00078 <span class="keyword">private</span>:<a name="l00079"></a>00079 Integer m_q;<a name="l00080"></a>00080 };<a name="l00081"></a>00081 <span class="comment"></span><a name="l00082"></a>00082 <span class="comment">//! _</span><a name="l00083"></a>00083 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> GROUP_PRECOMP, <span class="keyword">class</span> BASE_PRECOMP = DL_FixedBasePrecomputationImpl<CPP_TYPENAME GROUP_PRECOMP::Element> ><a name="l00084"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html">00084</a> <span class="keyword">class </span>CRYPTOPP_NO_VTABLE <a class="code" href="class_d_l___group_parameters___integer_based_impl.html" title="_">DL_GroupParameters_IntegerBasedImpl</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___group_parameters_impl.html" title="_">DL_GroupParametersImpl</a><GROUP_PRECOMP, BASE_PRECOMP, DL_GroupParameters_IntegerBased><a name="l00085"></a>00085 {<a name="l00086"></a>00086 <span class="keyword">typedef</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html" title="_">DL_GroupParameters_IntegerBasedImpl<GROUP_PRECOMP, BASE_PRECOMP></a> <a class="code" href="class_d_l___group_parameters___integer_based.html" title="_">ThisClass</a>;<a name="l00087"></a>00087 <a name="l00088"></a>00088 <span class="keyword">public</span>:<a name="l00089"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#0d2ec78e9a74ec651474b995e931aa74">00089</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">GROUP_PRECOMP::Element</a> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Element</a>;<a name="l00090"></a>00090 <a name="l00091"></a>00091 <span class="comment">// GeneratibleCryptoMaterial interface</span><a name="l00092"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#a017775352184937c5f064a4776d587e">00092</a> <span class="keywordtype">bool</span> GetVoidValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const</span><a name="l00093"></a>00093 <span class="keyword"> </span>{<span class="keywordflow">return</span> GetValueHelper<DL_GroupParameters_IntegerBased>(<span class="keyword">this</span>, name, valueType, pValue).Assignable();}<a name="l00094"></a>00094 <a name="l00095"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#0d668d2148cf57078a93f3a5a4b4ac2a">00095</a> <span class="keywordtype">void</span> AssignFrom(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> &source)<a name="l00096"></a>00096 {AssignFromHelper<DL_GroupParameters_IntegerBased>(<span class="keyword">this</span>, source);}<a name="l00097"></a>00097 <a name="l00098"></a>00098 <span class="comment">// DL_GroupParameters</span><a name="l00099"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#3f87996b08487e46f26d2915881c10c9">00099</a> <span class="keyword">const</span> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation<Element></a> & <a class="code" href="class_d_l___group_parameters_impl.html#d87e2b22a736dda0cf6f5b87bcb7055d">GetBasePrecomputation</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->m_gpc;}<a name="l00100"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#a6f498af673543a7569d67e1c874e90c">00100</a> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation<Element></a> & <a class="code" href="class_d_l___group_parameters_impl.html#e697d28fa013dd60f78b943cdd4fa973">AccessBasePrecomputation</a>() {<span class="keywordflow">return</span> this->m_gpc;}<a name="l00101"></a>00101 <a name="l00102"></a>00102 <span class="comment">// IntegerGroupParameters</span><a name="l00103"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#2c3b85d7565e222bb5492ae7d141ec85">00103</a> <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> & GetModulus()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->m_groupPrecomputation.GetModulus();}<a name="l00104"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#2573d91fcf24507c3dbb4016693c4fcd">00104</a> <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> & GetGenerator()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->m_gpc.GetBase(this->GetGroupPrecomputation());}<a name="l00105"></a>00105 <a name="l00106"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#42ef80eabc3ef9d5735f97447b6c765c">00106</a> <span class="keywordtype">void</span> SetModulusAndSubgroupGenerator(<span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &p, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &g) <span class="comment">// these have to be set together</span><a name="l00107"></a>00107 {this->m_groupPrecomputation.SetModulus(p); this->m_gpc.SetBase(this->GetGroupPrecomputation(), g); this->ParametersChanged();}<a name="l00108"></a>00108 <a name="l00109"></a>00109 <span class="comment">// non-inherited</span><a name="l00110"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#b7edd90ec71ac08615204b9b952bf72f">00110</a> <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#22c25c181c409600aa2e4bf1067ac47a">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html" title="_">DL_GroupParameters_IntegerBasedImpl<GROUP_PRECOMP, BASE_PRECOMP></a> &rhs)<span class="keyword"> const</span><a name="l00111"></a>00111 <span class="keyword"> </span>{<span class="keywordflow">return</span> GetModulus() == rhs.<a class="code" href="class_d_l___group_parameters___integer_based_impl.html#2c3b85d7565e222bb5492ae7d141ec85">GetModulus</a>() && GetGenerator() == rhs.<a class="code" href="class_d_l___group_parameters___integer_based_impl.html#2573d91fcf24507c3dbb4016693c4fcd">GetGenerator</a>() && this->GetSubgroupOrder() == rhs.<a class="code" href="class_d_l___group_parameters___integer_based.html#e6eb7fd2937f5eee9740d0db173f0475">GetSubgroupOrder</a>();}<a name="l00112"></a><a class="code" href="class_d_l___group_parameters___integer_based_impl.html#205bcf9ef811624a1755f356575b6edb">00112</a> <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#98d9036c415975aa2f0fc09fab285459">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html" title="_">DL_GroupParameters_IntegerBasedImpl<GROUP_PRECOMP, BASE_PRECOMP></a> &rhs)<span class="keyword"> const</span><a name="l00113"></a>00113 <span class="keyword"> </span>{<span class="keywordflow">return</span> !<a class="code" href="gf2n_8h.html#22c25c181c409600aa2e4bf1067ac47a">operator==</a>(rhs);}<a name="l00114"></a>00114 };<a name="l00115"></a>00115 <a name="l00116"></a>00116 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_d_l___group_parameters___integer_based_impl.html" title="_">DL_GroupParameters_IntegerBasedImpl<ModExpPrecomputation></a>;<a name="l00117"></a>00117 <span class="comment"></span><a name="l00118"></a>00118 <span class="comment">//! GF(p) group parameters</span><a name="l00119"></a><a class="code" href="class_d_l___group_parameters___g_f_p.html">00119</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL <a class="code" href="class_d_l___group_parameters___g_f_p.html" title="GF(p) group parameters.">DL_GroupParameters_GFP</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___group_parameters___integer_based_impl.html" title="_">DL_GroupParameters_IntegerBasedImpl</a><ModExpPrecomputation><a name="l00120"></a>00120 {<a name="l00121"></a>00121 <span class="keyword">public</span>:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -