📄 asn_8h-source.html
字号:
00234 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> BERDecodeAlgorithmParameters(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &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> &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> &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> &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> &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> &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> &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> &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> &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> &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> &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> <<span class="keyword">class</span> T>00271 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> DEREncodeUnsigned(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &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<<span class="keyword">sizeof</span>(w); i++)00284 buf[i+1] = byte(w >> (<span class="keyword">sizeof</span>(w)-1-i)*8);00285 bc = <span class="keyword">sizeof</span>(w);00286 <span class="keywordflow">while</span> (bc > 1 && 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] & 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<T>::max conflicts with MFC max macro</span>00299 <span class="comment">// CW41 workaround: std::numeric_limits<T>::max causes a template error</span>00300 <span class="keyword">template</span> <<span class="keyword">class</span> T>00301 <span class="keywordtype">void</span> BERDecodeUnsigned(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &in, T &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 > <span class="keyword">sizeof</span>(w) && *ptr == 0)00318 {00319 bc--;00320 ptr++;00321 }00322 <span class="keywordflow">if</span> (bc > <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<bc; i++)00327 w = (w << 8) | ptr[i];00328 00329 <span class="keywordflow">if</span> (w < minValue || w > maxValue)00330 BERDecodeError();00331 }00332 00333 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> ::CryptoPP::OID &lhs, <span class="keyword">const</span> ::CryptoPP::OID &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 &lhs, <span class="keyword">const</span> ::CryptoPP::OID &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<(<span class="keyword">const</span> ::CryptoPP::OID &lhs, <span class="keyword">const</span> ::CryptoPP::OID &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 &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 + -