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

📄 asn_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00234         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> BERDecodeAlgorithmParameters(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)00235                 {BERDecodeNull(bt); <span class="keywordflow">return</span> <span class="keyword">false</span>;}00236         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> DEREncodeAlgorithmParameters(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00237 <span class="keyword">                </span>{DEREncodeNull(bt); <span class="keywordflow">return</span> <span class="keyword">false</span>;}      <span class="comment">// see RFC 2459, section 7.3.1</span>00238         <span class="comment">// one of the following two should be overriden</span>00239         <span class="keyword">virtual</span> <span class="keywordtype">void</span> BERDecodeKey(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt) {assert(<span class="keyword">false</span>);}00240         <span class="keyword">virtual</span> <span class="keywordtype">void</span> BERDecodeKey2(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt, <span class="keywordtype">bool</span> parametersPresent, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)00241                 {BERDecodeKey(bt);}00242         <span class="keyword">virtual</span> <span class="keywordtype">void</span> DEREncodeKey(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span> =0;00243 };00244 <span class="comment"></span>00245 <span class="comment">//! .</span><a name="l00246"></a><a class="code" href="class_x509_public_key.html">00246</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL X509PublicKey : <span class="keyword">virtual</span> <span class="keyword">public</span> ASN1Key, <span class="keyword">public</span> <a class="code" href="class_public_key.html">PublicKey</a>00247 {00248 <span class="keyword">public</span>:00249         <span class="keywordtype">void</span> <a class="code" href="class_a_s_n1_object.html#_a_s_n1_objecta1">BERDecode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt);00250         <span class="keywordtype">void</span> <a class="code" href="class_a_s_n1_object.html#_a_s_n1_objecta2">DEREncode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span>;00251 };00252 <span class="comment"></span>00253 <span class="comment">//! .</span><a name="l00254"></a><a class="code" href="class_p_k_c_s8_private_key.html">00254</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL PKCS8PrivateKey : <span class="keyword">virtual</span> <span class="keyword">public</span> ASN1Key, <span class="keyword">public</span> <a class="code" href="class_private_key.html">PrivateKey</a>00255 {00256 <span class="keyword">public</span>:00257         <span class="keywordtype">void</span> <a class="code" href="class_a_s_n1_object.html#_a_s_n1_objecta1">BERDecode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt);00258         <span class="keywordtype">void</span> <a class="code" href="class_a_s_n1_object.html#_a_s_n1_objecta2">DEREncode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span>;00259 00260         <span class="keyword">virtual</span> <span class="keywordtype">void</span> BERDecodeOptionalAttributes(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)00261                 {}      <span class="comment">// TODO: skip optional attributes if present</span>00262         <span class="keyword">virtual</span> <span class="keywordtype">void</span> DEREncodeOptionalAttributes(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00263 <span class="keyword">                </span>{}00264 };00265 00266 <span class="comment">// ********************************************************</span>00267 <span class="comment"></span>00268 <span class="comment">//! DER Encode Unsigned</span>00269 <span class="comment"></span><span class="comment">/*! for INTEGER, BOOLEAN, and ENUM */</span>00270 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;00271 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> DEREncodeUnsigned(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;out, T w, byte asnTag = INTEGER)00272 {00273         byte buf[<span class="keyword">sizeof</span>(w)+1];00274         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bc;00275         <span class="keywordflow">if</span> (asnTag == BOOLEAN)00276         {00277                 buf[<span class="keyword">sizeof</span>(w)] = w ? 0xff : 0;00278                 bc = 1;00279         }00280         <span class="keywordflow">else</span>00281         {00282                 buf[0] = 0;00283                 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;<span class="keyword">sizeof</span>(w); i++)00284                         buf[i+1] = byte(w &gt;&gt; (<span class="keyword">sizeof</span>(w)-1-i)*8);00285                 bc = <span class="keyword">sizeof</span>(w);00286                 <span class="keywordflow">while</span> (bc &gt; 1 &amp;&amp; buf[<span class="keyword">sizeof</span>(w)+1-bc] == 0)00287                         --bc;00288                 <span class="keywordflow">if</span> (buf[<span class="keyword">sizeof</span>(w)+1-bc] &amp; 0x80)00289                         ++bc;00290         }00291         out.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(asnTag);00292         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lengthBytes = DERLengthEncode(out, bc);00293         out.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(buf+<span class="keyword">sizeof</span>(w)+1-bc, bc);00294         <span class="keywordflow">return</span> 1+lengthBytes+bc;00295 }00296 <span class="comment"></span>00297 <span class="comment">//! BER Decode Unsigned</span>00298 <span class="comment"></span><span class="comment">// VC60 workaround: std::numeric_limits&lt;T&gt;::max conflicts with MFC max macro</span>00299 <span class="comment">// CW41 workaround: std::numeric_limits&lt;T&gt;::max causes a template error</span>00300 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;00301 <span class="keywordtype">void</span> BERDecodeUnsigned(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;in, T &amp;w, byte asnTag = INTEGER,00302                                            T minValue = 0, T maxValue = 0xffffffff)00303 {00304         byte b;00305         <span class="keywordflow">if</span> (!in.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_2">Get</a>(b) || b != asnTag)00306                 BERDecodeError();00307 00308         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bc;00309         BERLengthDecode(in, bc);00310 00311         <a class="code" href="class_sec_block.html">SecByteBlock</a> buf(bc);00312 00313         <span class="keywordflow">if</span> (bc != in.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_2">Get</a>(buf, bc))00314                 BERDecodeError();00315 00316         <span class="keyword">const</span> byte *ptr = buf;00317         <span class="keywordflow">while</span> (bc &gt; <span class="keyword">sizeof</span>(w) &amp;&amp; *ptr == 0)00318         {00319                 bc--;00320                 ptr++;00321         }00322         <span class="keywordflow">if</span> (bc &gt; <span class="keyword">sizeof</span>(w))00323                 BERDecodeError();00324 00325         w = 0;00326         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;bc; i++)00327                 w = (w &lt;&lt; 8) | ptr[i];00328 00329         <span class="keywordflow">if</span> (w &lt; minValue || w &gt; maxValue)00330                 BERDecodeError();00331 }00332 00333 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> ::CryptoPP::OID &amp;lhs, <span class="keyword">const</span> ::CryptoPP::OID &amp;rhs)00334         {<span class="keywordflow">return</span> lhs.m_values == rhs.m_values;}00335 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> ::CryptoPP::OID &amp;lhs, <span class="keyword">const</span> ::CryptoPP::OID &amp;rhs)00336         {<span class="keywordflow">return</span> lhs.m_values != rhs.m_values;}00337 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&lt;(<span class="keyword">const</span> ::CryptoPP::OID &amp;lhs, <span class="keyword">const</span> ::CryptoPP::OID &amp;rhs)00338         {<span class="keywordflow">return</span> std::lexicographical_compare(lhs.m_values.begin(), lhs.m_values.end(), rhs.m_values.begin(), rhs.m_values.end());}00339 inline ::CryptoPP::OID operator+(<span class="keyword">const</span> ::CryptoPP::OID &amp;lhs, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> rhs)00340         {return ::CryptoPP::OID(lhs)+=rhs;}00341 00342 NAMESPACE_END00343 00344 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:08 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 + -