📄 asn_8cpp-source.html
字号:
00378 <span class="keywordflow">try</span> <span class="comment">// avoid throwing in constructor</span>00379 {00380 <span class="keywordflow">if</span> (!m_finished)00381 MessageEnd();00382 }00383 <span class="keywordflow">catch</span> (...)00384 {00385 }00386 }00387 00388 <span class="keywordtype">bool</span> BERGeneralDecoder::EndReached()<span class="keyword"> const</span>00389 <span class="keyword"></span>{00390 <span class="keywordflow">if</span> (m_definiteLength)00391 <span class="keywordflow">return</span> m_length == 0;00392 <span class="keywordflow">else</span>00393 { <span class="comment">// check end-of-content octets</span>00394 word16 i;00395 <span class="keywordflow">return</span> (m_inQueue.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_8">PeekWord16</a>(i)==2 && i==0);00396 }00397 }00398 00399 byte BERGeneralDecoder::PeekByte()<span class="keyword"> const</span>00400 <span class="keyword"></span>{00401 byte b;00402 <span class="keywordflow">if</span> (!<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_4">Peek</a>(b))00403 BERDecodeError();00404 <span class="keywordflow">return</span> b;00405 }00406 00407 <span class="keywordtype">void</span> BERGeneralDecoder::CheckByte(byte check)00408 {00409 byte b;00410 <span class="keywordflow">if</span> (!<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_2">Get</a>(b) || b != check)00411 BERDecodeError();00412 }00413 00414 <span class="keywordtype">void</span> BERGeneralDecoder::MessageEnd()00415 {00416 m_finished = <span class="keyword">true</span>;00417 <span class="keywordflow">if</span> (m_definiteLength)00418 {00419 <span class="keywordflow">if</span> (m_length != 0)00420 BERDecodeError();00421 }00422 <span class="keywordflow">else</span>00423 { <span class="comment">// remove end-of-content octets</span>00424 word16 i;00425 <span class="keywordflow">if</span> (m_inQueue.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_6">GetWord16</a>(i) != 2 || i != 0)00426 BERDecodeError();00427 }00428 }00429 <a name="l00430"></a><a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera7">00430</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera7">BERGeneralDecoder::TransferTo2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &transferBytes, <span class="keyword">const</span> std::string &channel, <span class="keywordtype">bool</span> blocking)00431 {00432 <span class="keywordflow">if</span> (m_definiteLength && transferBytes > m_length)00433 transferBytes = m_length;00434 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockedBytes = m_inQueue.<a class="code" href="class_buffered_transformation.html#_storez11_0">TransferTo2</a>(target, transferBytes, channel, blocking);00435 ReduceLength(transferBytes);00436 <span class="keywordflow">return</span> blockedBytes;00437 }00438 00439 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> BERGeneralDecoder::CopyRangeTo2(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> end, <span class="keyword">const</span> std::string &channel, <span class="keywordtype">bool</span> blocking)<span class="keyword"> const</span>00440 <span class="keyword"></span>{00441 <span class="keywordflow">if</span> (m_definiteLength)00442 end = STDMIN((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)m_length, end);00443 <span class="keywordflow">return</span> m_inQueue.<a class="code" href="class_buffered_transformation.html#_storez11_1">CopyRangeTo2</a>(target, begin, end, channel, blocking);00444 }00445 00446 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> BERGeneralDecoder::ReduceLength(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> delta)00447 {00448 <span class="keywordflow">if</span> (m_definiteLength)00449 {00450 <span class="keywordflow">if</span> (m_length < delta)00451 BERDecodeError();00452 m_length -= delta;00453 }00454 <span class="keywordflow">return</span> delta;00455 }00456 00457 DERGeneralEncoder::DERGeneralEncoder(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &outQueue, byte asnTag)00458 : m_outQueue(outQueue), m_finished(false), m_asnTag(asnTag)00459 {00460 }00461 00462 DERGeneralEncoder::DERGeneralEncoder(<a class="code" href="class_d_e_r_general_encoder.html">DERGeneralEncoder</a> &outQueue, byte asnTag)00463 : m_outQueue(outQueue), m_finished(false), m_asnTag(asnTag)00464 {00465 }00466 00467 DERGeneralEncoder::~DERGeneralEncoder()00468 {00469 <span class="keywordflow">try</span> <span class="comment">// avoid throwing in constructor</span>00470 {00471 <span class="keywordflow">if</span> (!m_finished)00472 MessageEnd();00473 }00474 <span class="keywordflow">catch</span> (...)00475 {00476 }00477 }00478 00479 <span class="keywordtype">void</span> DERGeneralEncoder::MessageEnd()00480 {00481 m_finished = <span class="keyword">true</span>;00482 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length = (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)CurrentSize();00483 m_outQueue.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(m_asnTag);00484 DERLengthEncode(m_outQueue, length);00485 <a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_10">TransferTo</a>(m_outQueue);00486 }00487 00488 <span class="comment">// *************************************************************</span>00489 <a name="l00490"></a><a class="code" href="class_x509_public_key.html#_x509_public_keya0">00490</a> <span class="keywordtype">void</span> <a class="code" href="class_x509_public_key.html#_x509_public_keya0">X509PublicKey::BERDecode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)00491 {00492 <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> subjectPublicKeyInfo(bt);00493 <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> algorithm(subjectPublicKeyInfo);00494 GetAlgorithmID().<a class="code" href="class_o_i_d.html#_o_i_da6">BERDecodeAndCheck</a>(algorithm);00495 <span class="keywordtype">bool</span> parametersPresent = algorithm.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera4">EndReached</a>() ? <span class="keyword">false</span> : BERDecodeAlgorithmParameters(algorithm);00496 algorithm.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00497 00498 <a class="code" href="class_b_e_r_general_decoder.html">BERGeneralDecoder</a> subjectPublicKey(subjectPublicKeyInfo, BIT_STRING);00499 subjectPublicKey.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera6">CheckByte</a>(0); <span class="comment">// unused bits</span>00500 BERDecodeKey2(subjectPublicKey, parametersPresent, subjectPublicKey.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera3">RemainingLength</a>());00501 subjectPublicKey.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00502 subjectPublicKeyInfo.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00503 }00504 <a name="l00505"></a><a class="code" href="class_x509_public_key.html#_x509_public_keya1">00505</a> <span class="keywordtype">void</span> <a class="code" href="class_x509_public_key.html#_x509_public_keya1">X509PublicKey::DEREncode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)<span class="keyword"> const</span>00506 <span class="keyword"></span>{00507 <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> subjectPublicKeyInfo(bt);00508 00509 <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> algorithm(subjectPublicKeyInfo);00510 GetAlgorithmID().<a class="code" href="class_o_i_d.html#_o_i_da4">DEREncode</a>(algorithm);00511 DEREncodeAlgorithmParameters(algorithm);00512 algorithm.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00513 00514 <a class="code" href="class_d_e_r_general_encoder.html">DERGeneralEncoder</a> subjectPublicKey(subjectPublicKeyInfo, BIT_STRING);00515 subjectPublicKey.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(0); <span class="comment">// unused bits</span>00516 DEREncodeKey(subjectPublicKey);00517 subjectPublicKey.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00518 00519 subjectPublicKeyInfo.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00520 }00521 <a name="l00522"></a><a class="code" href="class_p_k_c_s8_private_key.html#_p_k_c_s8_private_keya0">00522</a> <span class="keywordtype">void</span> <a class="code" href="class_p_k_c_s8_private_key.html#_p_k_c_s8_private_keya0">PKCS8PrivateKey::BERDecode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)00523 {00524 <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> privateKeyInfo(bt);00525 word32 version;00526 BERDecodeUnsigned<word32>(privateKeyInfo, version, INTEGER, 0, 0); <span class="comment">// check version</span>00527 00528 <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> algorithm(privateKeyInfo);00529 GetAlgorithmID().<a class="code" href="class_o_i_d.html#_o_i_da6">BERDecodeAndCheck</a>(algorithm);00530 <span class="keywordtype">bool</span> parametersPresent = BERDecodeAlgorithmParameters(algorithm);00531 algorithm.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00532 00533 <a class="code" href="class_b_e_r_general_decoder.html">BERGeneralDecoder</a> octetString(privateKeyInfo, OCTET_STRING);00534 BERDecodeKey2(octetString, parametersPresent, privateKeyInfo.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera3">RemainingLength</a>());00535 octetString.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00536 00537 BERDecodeOptionalAttributes(privateKeyInfo);00538 privateKeyInfo.MessageEnd();00539 }00540 <a name="l00541"></a><a class="code" href="class_p_k_c_s8_private_key.html#_p_k_c_s8_private_keya1">00541</a> <span class="keywordtype">void</span> <a class="code" href="class_p_k_c_s8_private_key.html#_p_k_c_s8_private_keya1">PKCS8PrivateKey::DEREncode</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)<span class="keyword"> const</span>00542 <span class="keyword"></span>{00543 <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> privateKeyInfo(bt);00544 DEREncodeUnsigned<word32>(privateKeyInfo, 0); <span class="comment">// version</span>00545 00546 <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> algorithm(privateKeyInfo);00547 GetAlgorithmID().<a class="code" href="class_o_i_d.html#_o_i_da4">DEREncode</a>(algorithm);00548 DEREncodeAlgorithmParameters(algorithm);00549 algorithm.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00550 00551 <a class="code" href="class_d_e_r_general_encoder.html">DERGeneralEncoder</a> octetString(privateKeyInfo, OCTET_STRING);00552 DEREncodeKey(octetString);00553 octetString.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00554 00555 DEREncodeOptionalAttributes(privateKeyInfo);00556 privateKeyInfo.MessageEnd();00557 }00558 00559 NAMESPACE_END00560 00561 <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 + -