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

📄 elgamal_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<a name="l00054"></a>00054 <a name="l00055"></a><a class="code" href="class_el_gamal_base.html#b88d21d5c3d4e7400bf8083b271e2923">00055</a>         <a class="code" href="struct_decoding_result.html" title="used to return decoding results">DecodingResult</a> SymmetricDecrypt(<span class="keyword">const</span> byte *key, <span class="keyword">const</span> byte *cipherText, <span class="keywordtype">size_t</span> cipherTextLength, byte *plainText, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> &amp;parameters)<span class="keyword"> const</span><a name="l00056"></a>00056 <span class="keyword">        </span>{<a name="l00057"></a>00057                 <span class="keyword">const</span> Integer &amp;p = GetGroupParameters().GetModulus();<a name="l00058"></a>00058                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modulusLen = p.<a class="code" href="class_integer.html#e7ee3f1bbea2b3138c6d8f1ce1aa2bf9" title="number of significant bytes = ceiling(BitCount()/8)">ByteCount</a>();<a name="l00059"></a>00059 <a name="l00060"></a>00060                 <span class="keywordflow">if</span> (cipherTextLength != modulusLen)<a name="l00061"></a>00061                         <span class="keywordflow">return</span> <a class="code" href="struct_decoding_result.html" title="used to return decoding results">DecodingResult</a>();<a name="l00062"></a>00062 <a name="l00063"></a>00063                 Integer m = a_times_b_mod_c(Integer(cipherText, modulusLen), Integer(key, modulusLen).InverseMod(p), p);<a name="l00064"></a>00064 <a name="l00065"></a>00065                 m.<a class="code" href="class_integer.html#c12ea467de9a609b86ec03d8cb8837e4" title="encode in big-endian format">Encode</a>(plainText, 1);<a name="l00066"></a>00066                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> plainTextLength = plainText[0];<a name="l00067"></a>00067                 <span class="keywordflow">if</span> (plainTextLength &gt; GetMaxSymmetricPlaintextLength(modulusLen))<a name="l00068"></a>00068                         <span class="keywordflow">return</span> <a class="code" href="struct_decoding_result.html" title="used to return decoding results">DecodingResult</a>();<a name="l00069"></a>00069                 m &gt;&gt;= 8;<a name="l00070"></a>00070                 m.<a class="code" href="class_integer.html#c12ea467de9a609b86ec03d8cb8837e4" title="encode in big-endian format">Encode</a>(plainText, plainTextLength);<a name="l00071"></a>00071                 <span class="keywordflow">return</span> <a class="code" href="struct_decoding_result.html" title="used to return decoding results">DecodingResult</a>(plainTextLength);<a name="l00072"></a>00072         }<a name="l00073"></a>00073 <a name="l00074"></a>00074         <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters___g_f_p.html" title="GF(p) group parameters.">DL_GroupParameters_GFP</a> &amp; GetGroupParameters() <span class="keyword">const</span> =0;<a name="l00075"></a>00075 };<a name="l00076"></a>00076 <a name="l00077"></a>00077 <span class="keyword">template</span> &lt;<span class="keyword">class</span> BASE, <span class="keyword">class</span> SCHEME_OPTIONS, <span class="keyword">class</span> KEY&gt;<a name="l00078"></a><a class="code" href="class_el_gamal_object_impl.html">00078</a> <span class="keyword">class </span><a class="code" href="class_el_gamal_object_impl.html">ElGamalObjectImpl</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___object_impl_base.html" title="_">DL_ObjectImplBase</a>&lt;BASE, SCHEME_OPTIONS, KEY&gt;, <span class="keyword">public</span> <a class="code" href="class_el_gamal_base.html">ElGamalBase</a><a name="l00079"></a>00079 {<a name="l00080"></a>00080 <span class="keyword">public</span>:<a name="l00081"></a><a class="code" href="class_el_gamal_object_impl.html#9f6c66901668aba72d3c752b5eb98363">00081</a>         <span class="keywordtype">size_t</span> <a class="code" href="class_el_gamal_object_impl.html#9f6c66901668aba72d3c752b5eb98363">FixedMaxPlaintextLength</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;MaxPlaintextLength(<a class="code" href="class_el_gamal_object_impl.html#cfc6e32d0d25daa813dfe67ffb1164f4">FixedCiphertextLength</a>());}<a name="l00082"></a><a class="code" href="class_el_gamal_object_impl.html#cfc6e32d0d25daa813dfe67ffb1164f4">00082</a>         <span class="keywordtype">size_t</span> <a class="code" href="class_el_gamal_object_impl.html#cfc6e32d0d25daa813dfe67ffb1164f4">FixedCiphertextLength</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;CiphertextLength(0);}<a name="l00083"></a>00083 <a name="l00084"></a><a class="code" href="class_el_gamal_object_impl.html#c75f76a5df1f04a05f25e8b18e62db37">00084</a>         <span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters___g_f_p.html" title="GF(p) group parameters.">DL_GroupParameters_GFP</a> &amp; <a class="code" href="class_el_gamal_object_impl.html#c75f76a5df1f04a05f25e8b18e62db37">GetGroupParameters</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;<a class="code" href="class_d_l___object_impl_base.html#83ca1d0b1d593d4884c57bfc7c74a206">GetKey</a>().GetGroupParameters();}<a name="l00085"></a>00085 <a name="l00086"></a><a class="code" href="class_el_gamal_object_impl.html#aa05597da937255a2685e870eceeeb35">00086</a>         <a class="code" href="struct_decoding_result.html" title="used to return decoding results">DecodingResult</a> <a class="code" href="class_el_gamal_object_impl.html#aa05597da937255a2685e870eceeeb35">FixedLengthDecrypt</a>(<a class="code" href="class_random_number_generator.html" title="interface for random number generators">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> byte *cipherText, byte *plainText)<span class="keyword"> const</span><a name="l00087"></a>00087 <span class="keyword">                </span>{<span class="keywordflow">return</span> Decrypt(rng, cipherText, <a class="code" href="class_el_gamal_object_impl.html#cfc6e32d0d25daa813dfe67ffb1164f4">FixedCiphertextLength</a>(), plainText);}<a name="l00088"></a>00088 <a name="l00089"></a>00089 <span class="keyword">protected</span>:<a name="l00090"></a><a class="code" href="class_el_gamal_object_impl.html#65cbf53a006d99f7f2fd6ed9fafc4254">00090</a>         <span class="keyword">const</span> <a class="code" href="class_d_l___key_agreement_algorithm.html" title="interface for DL key agreement algorithms">DL_KeyAgreementAlgorithm&lt;Integer&gt;</a> &amp; <a class="code" href="class_el_gamal_object_impl.html#65cbf53a006d99f7f2fd6ed9fafc4254">GetKeyAgreementAlgorithm</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> *<span class="keyword">this</span>;}<a name="l00091"></a><a class="code" href="class_el_gamal_object_impl.html#16f8839539e33d7b54da4e932efb9fb6">00091</a>         <span class="keyword">const</span> <a class="code" href="class_d_l___key_derivation_algorithm.html" title="interface for key derivation algorithms used in DL cryptosystems">DL_KeyDerivationAlgorithm&lt;Integer&gt;</a> &amp; <a class="code" href="class_el_gamal_object_impl.html#16f8839539e33d7b54da4e932efb9fb6">GetKeyDerivationAlgorithm</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> *<span class="keyword">this</span>;}<a name="l00092"></a><a class="code" href="class_el_gamal_object_impl.html#d69478057fe0a2da6f01275438b054b8">00092</a>         <span class="keyword">const</span> <a class="code" href="class_d_l___symmetric_encryption_algorithm.html" title="interface for symmetric encryption algorithms used in DL cryptosystems">DL_SymmetricEncryptionAlgorithm</a> &amp; <a class="code" href="class_el_gamal_object_impl.html#d69478057fe0a2da6f01275438b054b8">GetSymmetricEncryptionAlgorithm</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> *<span class="keyword">this</span>;}<a name="l00093"></a>00093 };<a name="l00094"></a>00094 <a name="l00095"></a><a class="code" href="struct_el_gamal_keys.html">00095</a> <span class="keyword">struct </span><a class="code" href="struct_el_gamal_keys.html">ElGamalKeys</a><a name="l00096"></a>00096 {<a name="l00097"></a><a class="code" href="struct_el_gamal_keys.html#e10059fce15b21179676ab2db8bd227d">00097</a>         <span class="keyword">typedef</span> <a class="code" href="struct_d_l___crypto_keys___g_f_p.html#e775386f9d0dfc252bdd1b58dbb5a529">DL_CryptoKeys_GFP::GroupParameters</a> <a class="code" href="struct_el_gamal_keys.html#e10059fce15b21179676ab2db8bd227d">GroupParameters</a>;<a name="l00098"></a><a class="code" href="struct_el_gamal_keys.html#ff410f83d6ac24b4afd96943114ce7a1">00098</a>         <span class="keyword">typedef</span> <a class="code" href="class_d_l___private_key___g_f_p___old_format.html" title="provided for backwards compatibility, this class uses the old non-standard Crypto++...">DL_PrivateKey_GFP_OldFormat&lt;DL_CryptoKeys_GFP::PrivateKey&gt;</a> <a class="code" href="class_d_l___private_key___g_f_p___old_format.html" title="provided for backwards compatibility, this class uses the old non-standard Crypto++...">PrivateKey</a>;<a name="l00099"></a><a class="code" href="struct_el_gamal_keys.html#82a0f8186c0a2ca37c7db9f3e6923256">00099</a>         <span class="keyword">typedef</span> <a class="code" href="class_d_l___public_key___g_f_p___old_format.html" title="provided for backwards compatibility, this class uses the old non-standard Crypto++...">DL_PublicKey_GFP_OldFormat&lt;DL_CryptoKeys_GFP::PublicKey&gt;</a> <a class="code" href="class_d_l___public_key___g_f_p___old_format.html" title="provided for backwards compatibility, this class uses the old non-standard Crypto++...">PublicKey</a>;<a name="l00100"></a>00100 };<a name="l00101"></a>00101 <span class="comment"></span><a name="l00102"></a>00102 <span class="comment">//! ElGamal encryption scheme with non-standard padding</span><a name="l00103"></a><a class="code" href="struct_el_gamal.html">00103</a> <span class="comment"></span><span class="keyword">struct </span><a class="code" href="struct_el_gamal.html" title="ElGamal encryption scheme with non-standard padding.">ElGamal</a><a name="l00104"></a>00104 {<a name="l00105"></a><a class="code" href="struct_el_gamal.html#fc9e91fc82cc2ae22244e8e4981d787b">00105</a>         <span class="keyword">typedef</span> <a class="code" href="struct_d_l___crypto_scheme_options.html" title="_">DL_CryptoSchemeOptions&lt;ElGamal, ElGamalKeys, int, int, int&gt;</a> <a class="code" href="struct_d_l___crypto_scheme_options.html" title="_">SchemeOptions</a>;<a name="l00106"></a>00106 <a name="l00107"></a><a class="code" href="struct_el_gamal.html#b2e9a64fa0598b30d8f715bb1dc66161">00107</a>         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="struct_el_gamal.html#b2e9a64fa0598b30d8f715bb1dc66161">StaticAlgorithmName</a>() {<span class="keywordflow">return</span> <span class="stringliteral">"ElgamalEnc/Crypto++Padding"</span>;}<a name="l00108"></a>00108 <a name="l00109"></a><a class="code" href="struct_el_gamal.html#babaa2c05b60dca79562b7946a181bca">00109</a>         <span class="keyword">typedef</span> <a class="code" href="struct_d_l___scheme_options_base.html#3a6c748ef53da4ac9a7213c70176e9b6">SchemeOptions::GroupParameters</a> <a class="code" href="struct_el_gamal.html#babaa2c05b60dca79562b7946a181bca">GroupParameters</a>;<span class="comment"></span><a name="l00110"></a>00110 <span class="comment">        //! implements PK_Encryptor interface</span><a name="l00111"></a><a class="code" href="struct_el_gamal.html#0d42013cb6ebbd0e676d4c4bd6a1e991">00111</a> <span class="comment"></span>        <span class="keyword">typedef</span> <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">PK_FinalTemplate&lt;ElGamalObjectImpl&lt;DL_EncryptorBase&lt;Integer&gt;</a>, <a class="code" href="struct_d_l___crypto_scheme_options.html" title="_">SchemeOptions</a>, <a class="code" href="struct_d_l___keyed_scheme_options.html#1eca68865c6e844837eb930d9048b28b">SchemeOptions::PublicKey</a>&gt; &gt; <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">Encryptor</a>;<span class="comment"></span><a name="l00112"></a>00112 <span class="comment">        //! implements PK_Decryptor interface</span><a name="l00113"></a><a class="code" href="struct_el_gamal.html#934a81aa391bf255297a478ea5d61985">00113</a> <span class="comment"></span>        <span class="keyword">typedef</span> <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">PK_FinalTemplate&lt;ElGamalObjectImpl&lt;DL_DecryptorBase&lt;Integer&gt;</a>, <a class="code" href="struct_d_l___crypto_scheme_options.html" title="_">SchemeOptions</a>, <a class="code" href="struct_d_l___keyed_scheme_options.html#f4d34b9282ed3a9aeb0f38ffa0fce6c9">SchemeOptions::PrivateKey</a>&gt; &gt; <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">Decryptor</a>;<a name="l00114"></a>00114 };<a name="l00115"></a>00115 <a name="l00116"></a>00116 <span class="keyword">typedef</span> <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">ElGamal::Encryptor</a> <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">ElGamalEncryptor</a>;<a name="l00117"></a>00117 <span class="keyword">typedef</span> <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">ElGamal::Decryptor</a> <a class="code" href="class_p_k___final_template.html" title="A template implementing constructors for public key algorithm classes.">ElGamalDecryptor</a>;<a name="l00118"></a>00118 <a name="l00119"></a>00119 NAMESPACE_END<a name="l00120"></a>00120 <a name="l00121"></a>00121 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:20 2007 for Crypto++ by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address></body></html>

⌨️ 快捷键说明

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