📄 elgamal_8h-source.html
字号:
<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> &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 &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 > 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 >>= 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> & 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> <<span class="keyword">class</span> BASE, <span class="keyword">class</span> SCHEME_OPTIONS, <span class="keyword">class</span> KEY><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><BASE, SCHEME_OPTIONS, KEY>, <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->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->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> & <a class="code" href="class_el_gamal_object_impl.html#c75f76a5df1f04a05f25e8b18e62db37">GetGroupParameters</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-><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> &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<Integer></a> & <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<Integer></a> & <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> & <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<DL_CryptoKeys_GFP::PrivateKey></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<DL_CryptoKeys_GFP::PublicKey></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<ElGamal, ElGamalKeys, int, int, int></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<ElGamalObjectImpl<DL_EncryptorBase<Integer></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>> > <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<ElGamalObjectImpl<DL_DecryptorBase<Integer></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>> > <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 <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 + -