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> <<span class="keyword">class</span> MAC, <span class="keywordtype">bool</span> DHAES_MODE><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> &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> <<span class="keyword">class</span> T, <span class="keywordtype">bool</span> DHAES_MODE, <span class="keyword">class</span> KDF><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><T>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<T></a> &params, byte *derivedKey, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> derivedLength, <span class="keyword">const</span> T &agreedElement, <span class="keyword">const</span> T &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 <a href="http://www.weidai.com/scan-mirror/ca.html#DLIES">DLIES</a></span>00488 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> COFACTOR_OPTION = NoCofactorMultiplication, <span class="keywordtype">bool</span> DHAES_MODE = true><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><00491 DL_CryptoKeys_GFP,00492 DL_KeyAgreementAlgorithm_DH<Integer, COFACTOR_OPTION>,00493 DL_KeyDerivationAlgorithm_P1363<Integer, DHAES_MODE, P1363_KDF2<SHA1> >,00494 DL_EncryptionAlgorithm_Xor<HMAC<SHA1>, DHAES_MODE>,00495 DLIES<> >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 + -
显示快捷键?