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

📄 oaep_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Crypto++: oaep.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.2 --><div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Compound&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Compound&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div><h1>oaep.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// oaep.cpp - written and placed in the public domain by Wei Dai</span>00002 00003 <span class="preprocessor">#include "pch.h"</span>00004 <span class="preprocessor">#include "oaep.h"</span>00005 00006 <span class="preprocessor">#include &lt;functional&gt;</span>00007 00008 NAMESPACE_BEGIN(CryptoPP)00009 00010 <span class="comment">// ********************************************************</span>00011 00012 ANONYMOUS_NAMESPACE_BEGIN00013         <span class="keyword">template</span> &lt;<span class="keyword">class</span> H, byte *P, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> PLen&gt;00014         <span class="keyword">struct </span>PHashComputation00015         {00016                 PHashComputation()      {H().CalculateDigest(pHash, P, PLen);}00017                 byte pHash[H::DIGESTSIZE];00018         };00019 00020         <span class="keyword">template</span> &lt;<span class="keyword">class</span> H, byte *P, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> PLen&gt;00021         <span class="keyword">const</span> byte *PHash()00022         {00023                 <span class="keyword">static</span> PHashComputation&lt;H,P,PLen&gt; pHash;00024                 <span class="keywordflow">return</span> pHash.pHash;00025         }00026 NAMESPACE_END00027 00028 <span class="keyword">template</span> &lt;<span class="keyword">class</span> H, <span class="keyword">class</span> MGF, byte *P, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> PLen&gt;00029 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_o_a_e_p.html">OAEP&lt;H,MGF,P,PLen&gt;::MaxUnpaddedLength</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedLength)<span class="keyword"> const</span>00030 <span class="keyword"></span>{00031         <span class="keywordflow">return</span> paddedLength/8 &gt; 1+2*H::DIGESTSIZE ? paddedLength/8-1-2*H::DIGESTSIZE : 0;00032 }00033 00034 <span class="keyword">template</span> &lt;<span class="keyword">class</span> H, <span class="keyword">class</span> MGF, byte *P, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> PLen&gt;00035 <span class="keywordtype">void</span> <a class="code" href="class_o_a_e_p.html">OAEP&lt;H,MGF,P,PLen&gt;::Pad</a>(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> byte *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputLength, byte *oaepBlock, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oaepBlockLen)<span class="keyword"> const</span>00036 <span class="keyword"></span>{00037         assert (inputLength &lt;= MaxUnpaddedLength(oaepBlockLen));00038 00039         <span class="comment">// convert from bit length to byte length</span>00040         <span class="keywordflow">if</span> (oaepBlockLen % 8 != 0)00041         {00042                 oaepBlock[0] = 0;00043                 oaepBlock++;00044         }00045         oaepBlockLen /= 8;00046 00047         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hLen = H::DIGESTSIZE;00048         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seedLen = hLen, dbLen = oaepBlockLen-seedLen;00049         byte *<span class="keyword">const</span> maskedSeed = oaepBlock;00050         byte *<span class="keyword">const</span> maskedDB = oaepBlock+seedLen;00051 00052         <span class="comment">// DB = pHash || 00 ... || 01 || M</span>00053         memcpy(maskedDB, PHash&lt;H,P,PLen&gt;(), hLen);00054         memset(maskedDB+hLen, 0, dbLen-hLen-inputLength-1);00055         maskedDB[dbLen-inputLength-1] = 0x01;00056         memcpy(maskedDB+dbLen-inputLength, input, inputLength);00057 00058         rng.<a class="code" href="class_random_number_generator.html#_x917_r_n_ga4">GenerateBlock</a>(maskedSeed, seedLen);00059         MGF::GenerateAndMask(maskedDB, dbLen, maskedSeed, seedLen);00060         MGF::GenerateAndMask(maskedSeed, seedLen, maskedDB, dbLen);00061 }00062 00063 <span class="keyword">template</span> &lt;<span class="keyword">class</span> H, <span class="keyword">class</span> MGF, byte *P, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> PLen&gt;00064 <a class="code" href="struct_decoding_result.html">DecodingResult</a> <a class="code" href="class_o_a_e_p.html">OAEP&lt;H,MGF,P,PLen&gt;::Unpad</a>(<span class="keyword">const</span> byte *oaepBlock, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oaepBlockLen, byte *output)<span class="keyword"> const</span>00065 <span class="keyword"></span>{00066         <span class="keywordtype">bool</span> invalid = <span class="keyword">false</span>;00067 00068         <span class="comment">// convert from bit length to byte length</span>00069         <span class="keywordflow">if</span> (oaepBlockLen % 8 != 0)00070         {00071                 invalid = (oaepBlock[0] != 0) || invalid;00072                 oaepBlock++;00073         }00074         oaepBlockLen /= 8;00075 00076         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hLen = H::DIGESTSIZE;00077         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seedLen = hLen, dbLen = oaepBlockLen-seedLen;00078 00079         invalid = (oaepBlockLen &lt; 2*hLen+1) || invalid;00080 00081         <a class="code" href="class_sec_block.html">SecByteBlock</a> t(oaepBlock, oaepBlockLen);00082         byte *<span class="keyword">const</span> maskedSeed = t;00083         byte *<span class="keyword">const</span> maskedDB = t+seedLen;00084 00085         MGF::GenerateAndMask(maskedSeed, seedLen, maskedDB, dbLen);00086         MGF::GenerateAndMask(maskedDB, dbLen, maskedSeed, seedLen);00087 00088         <span class="comment">// DB = pHash' || 00 ... || 01 || M</span>00089 00090         byte *M = std::find(maskedDB+hLen, maskedDB+dbLen, 0x01);00091         invalid = (M == maskedDB+dbLen) || invalid;00092         invalid = (std::find_if(maskedDB+hLen, M, std::bind2nd(std::not_equal_to&lt;byte&gt;(), 0)) != M) || invalid;00093         invalid = (memcmp(maskedDB, PHash&lt;H,P,PLen&gt;(), hLen) != 0) || invalid;00094 00095         <span class="keywordflow">if</span> (invalid)00096                 <span class="keywordflow">return</span> <a class="code" href="struct_decoding_result.html">DecodingResult</a>();00097 00098         M++;00099         memcpy(output, M, maskedDB+dbLen-M);00100         <span class="keywordflow">return</span> <a class="code" href="struct_decoding_result.html">DecodingResult</a>(maskedDB+dbLen-M);00101 }00102 00103 NAMESPACE_END</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:21 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -