gfpcrypt_8h-source.html

来自「Crypto++是一个非常强大的密码学库,主要是功能全」· HTML 代码 · 共 516 行 · 第 1/5 页

HTML
516
字号
00410 <span class="preprocessor"></span>                MAX_PRIME_LENGTH = 1024, PRIME_LENGTH_MULTIPLE = 64};00411 };00412 <span class="comment"></span>00413 <span class="comment">//! .</span>00414 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> MAC, <span class="keywordtype">bool</span> DHAES_MODE&gt;<a name="l00415"></a><a class="code" href="class_d_l___encryption_algorithm___xor.html">00415</a> <span class="keyword">class </span><a class="code" href="class_d_l___encryption_algorithm___xor.html">DL_EncryptionAlgorithm_Xor</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___symmetric_encryption_algorithm.html">DL_SymmetricEncryptionAlgorithm</a>00416 {00417 <span class="keyword">public</span>:00418         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetSymmetricKeyLength(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> plainTextLength)<span class="keyword"> const</span>00419 <span class="keyword">                </span>{<span class="keywordflow">return</span> plainTextLength + MAC::DEFAULT_KEYLENGTH;}00420         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetSymmetricCiphertextLength(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> plainTextLength)<span class="keyword"> const</span>00421 <span class="keyword">                </span>{<span class="keywordflow">return</span> plainTextLength + MAC::DIGESTSIZE;}00422         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetMaxSymmetricPlaintextLength(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cipherTextLength)<span class="keyword"> const</span>00423 <span class="keyword">                </span>{<span class="keywordflow">return</span> SaturatingSubtract(cipherTextLength, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)MAC::DIGESTSIZE);}00424         <span class="keywordtype">void</span> SymmetricEncrypt(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> byte *key, <span class="keyword">const</span> byte *plainText, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> plainTextLength, byte *cipherText)<span class="keyword"> const</span>00425 <span class="keyword">        </span>{00426                 <span class="keyword">const</span> byte *cipherKey, *macKey;00427                 <span class="keywordflow">if</span> (DHAES_MODE)00428                 {00429                         macKey = key;00430                         cipherKey = key + MAC::DEFAULT_KEYLENGTH;00431                 }00432                 <span class="keywordflow">else</span>00433                 {00434                         cipherKey = key;00435                         macKey = key + plainTextLength;00436                 }00437 00438                 xorbuf(cipherText, plainText, cipherKey, plainTextLength);00439                 MAC(macKey).CalculateDigest(cipherText + plainTextLength, cipherText, plainTextLength);00440         }00441         <a class="code" href="struct_decoding_result.html">DecodingResult</a> SymmetricDecrypt(<span class="keyword">const</span> byte *key, <span class="keyword">const</span> byte *cipherText, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cipherTextLength, byte *plainText)<span class="keyword"> const</span>00442 <span class="keyword">        </span>{00443                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> plainTextLength = GetMaxSymmetricPlaintextLength(cipherTextLength);00444                 <span class="keyword">const</span> byte *cipherKey, *macKey;00445                 <span class="keywordflow">if</span> (DHAES_MODE)00446                 {00447                         macKey = key;00448                         cipherKey = key + MAC::DEFAULT_KEYLENGTH;00449                 }00450                 <span class="keywordflow">else</span>00451                 {00452                         cipherKey = key;00453                         macKey = key + plainTextLength;00454                 }00455 00456                 <span class="keywordflow">if</span> (!MAC(macKey).VerifyDigest(cipherText + plainTextLength, cipherText, plainTextLength))00457                         <span class="keywordflow">return</span> <a class="code" href="struct_decoding_result.html">DecodingResult</a>();00458                 xorbuf(plainText, cipherText, cipherKey, plainTextLength);00459                 <span class="keywordflow">return</span> <a class="code" href="struct_decoding_result.html">DecodingResult</a>(plainTextLength);00460         }00461 };00462 <span class="comment"></span>00463 <span class="comment">//! .</span>00464 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keywordtype">bool</span> DHAES_MODE, <span class="keyword">class</span> KDF&gt;<a name="l00465"></a><a class="code" href="class_d_l___key_derivation_algorithm___p1363.html">00465</a> <span class="keyword">class </span><a class="code" href="class_d_l___key_derivation_algorithm___p1363.html">DL_KeyDerivationAlgorithm_P1363</a> : <span class="keyword">public</span> <a class="code" href="class_d_l___key_derivation_algorithm.html">DL_KeyDerivationAlgorithm</a>&lt;T&gt;00466 {00467 <span class="keyword">public</span>:00468         <span class="keywordtype">void</span> Derive(<span class="keyword">const</span> <a class="code" href="class_d_l___group_parameters.html">DL_GroupParameters&lt;T&gt;</a> &amp;params, byte *derivedKey, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> derivedLength, <span class="keyword">const</span> T &amp;agreedElement, <span class="keyword">const</span> T &amp;ephemeralPublicKey)<span class="keyword"> const</span>00469 <span class="keyword">        </span>{00470                 <a class="code" href="class_sec_block.html">SecByteBlock</a> agreedSecret;00471                 <span class="keywordflow">if</span> (DHAES_MODE)00472                 {00473                         agreedSecret.<a class="code" href="class_sec_block.html#_sec_block_with_hinta19">New</a>(params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa18">GetEncodedElementSize</a>(<span class="keyword">true</span>) + params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa18">GetEncodedElementSize</a>(<span class="keyword">false</span>));00474                         params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa19">EncodeElement</a>(<span class="keyword">true</span>, ephemeralPublicKey, agreedSecret);00475                         params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa19">EncodeElement</a>(<span class="keyword">false</span>, agreedElement, agreedSecret + params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa18">GetEncodedElementSize</a>(<span class="keyword">true</span>));00476                 }00477                 <span class="keywordflow">else</span>00478                 {00479                         agreedSecret.<a class="code" href="class_sec_block.html#_sec_block_with_hinta19">New</a>(params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa18">GetEncodedElementSize</a>(<span class="keyword">false</span>));00480                         params.<a class="code" href="class_d_l___group_parameters.html#_d_l___group_parametersa19">EncodeElement</a>(<span class="keyword">false</span>, agreedElement, agreedSecret);00481                 }00482 00483                 KDF::DeriveKey(derivedKey, derivedLength, agreedSecret, agreedSecret.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00484         }00485 };00486 <span class="comment"></span>00487 <span class="comment">//! Discrete Log Integrated Encryption Scheme, AKA &lt;a href="http://www.weidai.com/scan-mirror/ca.html#DLIES"&gt;DLIES&lt;/a&gt;</span>00488 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> COFACTOR_OPTION = NoCofactorMultiplication, <span class="keywordtype">bool</span> DHAES_MODE = true&gt;<a name="l00489"></a><a class="code" href="struct_d_l_i_e_s.html">00489</a> <span class="keyword">struct </span><a class="code" href="struct_d_l_i_e_s.html">DLIES</a>00490         : <span class="keyword">public</span> <a class="code" href="class_d_l___e_s.html">DL_ES</a>&lt;00491                 DL_CryptoKeys_GFP,00492                 DL_KeyAgreementAlgorithm_DH&lt;Integer, COFACTOR_OPTION&gt;,00493                 DL_KeyDerivationAlgorithm_P1363&lt;Integer, DHAES_MODE, P1363_KDF2&lt;SHA1&gt; &gt;,00494                 DL_EncryptionAlgorithm_Xor&lt;HMAC&lt;SHA1&gt;, DHAES_MODE&gt;,00495                 DLIES&lt;&gt; &gt;00496 {00497         <span class="keyword">static</span> std::string StaticAlgorithmName() {<span class="keywordflow">return</span> <span class="stringliteral">"DLIES"</span>;}      <span class="comment">// TODO: fix this after name is standardized</span>00498 };00499 00500 NAMESPACE_END00501 00502 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:16 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

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