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

📄 asn_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 3 页
字号:
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 &amp;&amp; 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> &amp;target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;transferBytes, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)00431 {00432         <span class="keywordflow">if</span> (m_definiteLength &amp;&amp; transferBytes &gt; 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> &amp;target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> end, <span class="keyword">const</span> std::string &amp;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 &lt; 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> &amp;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> &amp;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> &amp;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> &amp;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> &amp;bt)00523 {00524         <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> privateKeyInfo(bt);00525                 word32 version;00526                 BERDecodeUnsigned&lt;word32&gt;(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> &amp;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&lt;word32&gt;(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 + -