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

📄 asn_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="l00277"></a>00277 <span class="comment"></span>        <span class="keyword">virtual</span> <span class="keywordtype">void</span> BERDecodePrivateKey(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt, <span class="keywordtype">bool</span> parametersPresent, <span class="keywordtype">size_t</span> size) =0;<span class="comment"></span><a name="l00278"></a>00278 <span class="comment">        //! encode privateKey part of privateKeyInfo, without the OCTET STRING header</span><a name="l00279"></a>00279 <span class="comment"></span>        <span class="keyword">virtual</span> <span class="keywordtype">void</span> DEREncodePrivateKey(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span> =0;<a name="l00280"></a>00280 <span class="comment"></span><a name="l00281"></a>00281 <span class="comment">        //! decode optional attributes including context-specific tag</span><a name="l00282"></a>00282 <span class="comment"></span><span class="comment">        /*! /note default implementation stores attributes to be output in DEREncodeOptionalAttributes */</span><a name="l00283"></a>00283         <span class="keyword">virtual</span> <span class="keywordtype">void</span> BERDecodeOptionalAttributes(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt);<span class="comment"></span><a name="l00284"></a>00284 <span class="comment">        //! encode optional attributes including context-specific tag</span><a name="l00285"></a>00285 <span class="comment"></span>        <span class="keyword">virtual</span> <span class="keywordtype">void</span> DEREncodeOptionalAttributes(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span>;<a name="l00286"></a>00286 <a name="l00287"></a>00287 <span class="keyword">protected</span>:<a name="l00288"></a><a class="code" href="class_p_k_c_s8_private_key.html#efc1a5436742d18d7774085fa7a45f72">00288</a>         <a class="code" href="class_byte_queue.html" title="Byte Queue.">ByteQueue</a> m_optionalAttributes;<a name="l00289"></a>00289 };<a name="l00290"></a>00290 <a name="l00291"></a>00291 <span class="comment">// ********************************************************</span><a name="l00292"></a>00292 <span class="comment"></span><a name="l00293"></a>00293 <span class="comment">//! DER Encode Unsigned</span><a name="l00294"></a>00294 <span class="comment"></span><span class="comment">/*! for INTEGER, BOOLEAN, and ENUM */</span><a name="l00295"></a>00295 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;<a name="l00296"></a>00296 <span class="keywordtype">size_t</span> DEREncodeUnsigned(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;out, T w, byte asnTag = INTEGER)<a name="l00297"></a>00297 {<a name="l00298"></a>00298         byte buf[<span class="keyword">sizeof</span>(w)+1];<a name="l00299"></a>00299         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bc;<a name="l00300"></a>00300         <span class="keywordflow">if</span> (asnTag == BOOLEAN)<a name="l00301"></a>00301         {<a name="l00302"></a>00302                 buf[<span class="keyword">sizeof</span>(w)] = w ? 0xff : 0;<a name="l00303"></a>00303                 bc = 1;<a name="l00304"></a>00304         }<a name="l00305"></a>00305         <span class="keywordflow">else</span><a name="l00306"></a>00306         {<a name="l00307"></a>00307                 buf[0] = 0;<a name="l00308"></a>00308                 <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++)<a name="l00309"></a>00309                         buf[i+1] = byte(w &gt;&gt; (<span class="keyword">sizeof</span>(w)-1-i)*8);<a name="l00310"></a>00310                 bc = <span class="keyword">sizeof</span>(w);<a name="l00311"></a>00311                 <span class="keywordflow">while</span> (bc &gt; 1 &amp;&amp; buf[<span class="keyword">sizeof</span>(w)+1-bc] == 0)<a name="l00312"></a>00312                         --bc;<a name="l00313"></a>00313                 <span class="keywordflow">if</span> (buf[<span class="keyword">sizeof</span>(w)+1-bc] &amp; 0x80)<a name="l00314"></a>00314                         ++bc;<a name="l00315"></a>00315         }<a name="l00316"></a>00316         out.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(asnTag);<a name="l00317"></a>00317         <span class="keywordtype">size_t</span> lengthBytes = DERLengthEncode(out, bc);<a name="l00318"></a>00318         out.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(buf+<span class="keyword">sizeof</span>(w)+1-bc, bc);<a name="l00319"></a>00319         <span class="keywordflow">return</span> 1+lengthBytes+bc;<a name="l00320"></a>00320 }<a name="l00321"></a>00321 <span class="comment"></span><a name="l00322"></a>00322 <span class="comment">//! BER Decode Unsigned</span><a name="l00323"></a>00323 <span class="comment"></span><span class="comment">// VC60 workaround: std::numeric_limits&lt;T&gt;::max conflicts with MFC max macro</span><a name="l00324"></a>00324 <span class="comment">// CW41 workaround: std::numeric_limits&lt;T&gt;::max causes a template error</span><a name="l00325"></a>00325 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;<a name="l00326"></a>00326 <span class="keywordtype">void</span> BERDecodeUnsigned(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;in, T &amp;w, byte asnTag = INTEGER,<a name="l00327"></a>00327                                            T minValue = 0, T maxValue = 0xffffffff)<a name="l00328"></a>00328 {<a name="l00329"></a>00329         byte b;<a name="l00330"></a>00330         <span class="keywordflow">if</span> (!in.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(b) || b != asnTag)<a name="l00331"></a>00331                 BERDecodeError();<a name="l00332"></a>00332 <a name="l00333"></a>00333         <span class="keywordtype">size_t</span> bc;<a name="l00334"></a>00334         BERLengthDecode(in, bc);<a name="l00335"></a>00335 <a name="l00336"></a>00336         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> buf(bc);<a name="l00337"></a>00337 <a name="l00338"></a>00338         <span class="keywordflow">if</span> (bc != in.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(buf, bc))<a name="l00339"></a>00339                 BERDecodeError();<a name="l00340"></a>00340 <a name="l00341"></a>00341         <span class="keyword">const</span> byte *ptr = buf;<a name="l00342"></a>00342         <span class="keywordflow">while</span> (bc &gt; <span class="keyword">sizeof</span>(w) &amp;&amp; *ptr == 0)<a name="l00343"></a>00343         {<a name="l00344"></a>00344                 bc--;<a name="l00345"></a>00345                 ptr++;<a name="l00346"></a>00346         }<a name="l00347"></a>00347         <span class="keywordflow">if</span> (bc &gt; <span class="keyword">sizeof</span>(w))<a name="l00348"></a>00348                 BERDecodeError();<a name="l00349"></a>00349 <a name="l00350"></a>00350         w = 0;<a name="l00351"></a>00351         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;bc; i++)<a name="l00352"></a>00352                 w = (w &lt;&lt; 8) | ptr[i];<a name="l00353"></a>00353 <a name="l00354"></a>00354         <span class="keywordflow">if</span> (w &lt; minValue || w &gt; maxValue)<a name="l00355"></a>00355                 BERDecodeError();<a name="l00356"></a>00356 }<a name="l00357"></a>00357 <a name="l00358"></a>00358 <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#22c25c181c409600aa2e4bf1067ac47a">operator==</a>(const ::CryptoPP::OID &amp;lhs, const ::CryptoPP::OID &amp;rhs)<a name="l00359"></a>00359         {<span class="keywordflow">return</span> lhs.m_values == rhs.m_values;}<a name="l00360"></a>00360 <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#98d9036c415975aa2f0fc09fab285459">operator!=</a>(const ::CryptoPP::OID &amp;lhs, const ::CryptoPP::OID &amp;rhs)<a name="l00361"></a>00361         {<span class="keywordflow">return</span> lhs.m_values != rhs.m_values;}<a name="l00362"></a>00362 <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#f81f67e93bfb8bbb776cab689c83c7e9" title="compares degree">operator&lt;</a>(const ::CryptoPP::OID &amp;lhs, const ::CryptoPP::OID &amp;rhs)<a name="l00363"></a>00363         {<span class="keywordflow">return</span> std::lexicographical_compare(lhs.m_values.begin(), lhs.m_values.end(), rhs.m_values.begin(), rhs.m_values.end());}<a name="l00364"></a>00364 inline ::CryptoPP::OID <a class="code" href="gf2n_8h.html#f90f6d4d1dec04baadfc546843f8da4c">operator+</a>(const ::CryptoPP::OID &amp;lhs, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> rhs)<a name="l00365"></a>00365         {return ::CryptoPP::OID(lhs)+=rhs;}<a name="l00366"></a>00366 <a name="l00367"></a>00367 NAMESPACE_END<a name="l00368"></a>00368 <a name="l00369"></a>00369 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:19 2007 for Crypto++ by&nbsp;<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 + -