📄 asn_8h-source.html
字号:
<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> &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> &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> &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> &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> <<span class="keyword">class</span> T><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> &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<<span class="keyword">sizeof</span>(w); i++)<a name="l00309"></a>00309 buf[i+1] = byte(w >> (<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 > 1 && 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] & 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<T>::max conflicts with MFC max macro</span><a name="l00324"></a>00324 <span class="comment">// CW41 workaround: std::numeric_limits<T>::max causes a template error</span><a name="l00325"></a>00325 <span class="keyword">template</span> <<span class="keyword">class</span> T><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> &in, T &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 > <span class="keyword">sizeof</span>(w) && *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 > <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<bc; i++)<a name="l00352"></a>00352 w = (w << 8) | ptr[i];<a name="l00353"></a>00353 <a name="l00354"></a>00354 <span class="keywordflow">if</span> (w < minValue || w > 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 &lhs, const ::CryptoPP::OID &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 &lhs, const ::CryptoPP::OID &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<</a>(const ::CryptoPP::OID &lhs, const ::CryptoPP::OID &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 &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 <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 + -