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

📄 asn_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00452"></a>00452 <a name="l00453"></a><a class="code" href="class_b_e_r_general_decoder.html#ddc64001c0b00cd070f2203da62e7ec4">00453</a> <span class="keywordtype">size_t</span> <a class="code" href="class_b_e_r_general_decoder.html#ddc64001c0b00cd070f2203da62e7ec4" title="upon return, byteCount contains number of bytes that have finished being transfered...">BERGeneralDecoder::TransferTo2</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;target, lword &amp;transferBytes, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)<a name="l00454"></a>00454 {<a name="l00455"></a>00455         <span class="keywordflow">if</span> (<a class="code" href="class_b_e_r_general_decoder.html#a9337ce30f65285a708bcb91b12524c8">m_definiteLength</a> &amp;&amp; transferBytes &gt; <a class="code" href="class_b_e_r_general_decoder.html#11096d3b64df9f0b3ff3d8d74be9b3c3">m_length</a>)<a name="l00456"></a>00456                 transferBytes = <a class="code" href="class_b_e_r_general_decoder.html#11096d3b64df9f0b3ff3d8d74be9b3c3">m_length</a>;<a name="l00457"></a>00457         <span class="keywordtype">size_t</span> blockedBytes = <a class="code" href="class_b_e_r_general_decoder.html#29c44ea3a6c6cdf63c58046d8ab22266">m_inQueue</a>.<a class="code" href="class_buffered_transformation.html#041e8af260c474a43bd232cd4143f406" title="upon return, byteCount contains number of bytes that have finished being transfered...">TransferTo2</a>(target, transferBytes, channel, blocking);<a name="l00458"></a>00458         ReduceLength(transferBytes);<a name="l00459"></a>00459         <span class="keywordflow">return</span> blockedBytes;<a name="l00460"></a>00460 }<a name="l00461"></a>00461 <a name="l00462"></a><a class="code" href="class_b_e_r_general_decoder.html#6f0f56b473c4386359bd4d196ef4c528">00462</a> <span class="keywordtype">size_t</span> <a class="code" href="class_b_e_r_general_decoder.html#6f0f56b473c4386359bd4d196ef4c528" title="upon return, begin contains the start position of data yet to be finished copying...">BERGeneralDecoder::CopyRangeTo2</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;target, lword &amp;begin, lword end, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)<span class="keyword"> const</span><a name="l00463"></a>00463 <span class="keyword"></span>{<a name="l00464"></a>00464         <span class="keywordflow">if</span> (<a class="code" href="class_b_e_r_general_decoder.html#a9337ce30f65285a708bcb91b12524c8">m_definiteLength</a>)<a name="l00465"></a>00465                 end = STDMIN(<a class="code" href="class_b_e_r_general_decoder.html#11096d3b64df9f0b3ff3d8d74be9b3c3">m_length</a>, end);<a name="l00466"></a>00466         <span class="keywordflow">return</span> <a class="code" href="class_b_e_r_general_decoder.html#29c44ea3a6c6cdf63c58046d8ab22266">m_inQueue</a>.<a class="code" href="class_buffered_transformation.html#0dd57085cd3e3340eb8d16d941332a6a" title="upon return, begin contains the start position of data yet to be finished copying...">CopyRangeTo2</a>(target, begin, end, channel, blocking);<a name="l00467"></a>00467 }<a name="l00468"></a>00468 <a name="l00469"></a>00469 lword BERGeneralDecoder::ReduceLength(lword delta)<a name="l00470"></a>00470 {<a name="l00471"></a>00471         <span class="keywordflow">if</span> (<a class="code" href="class_b_e_r_general_decoder.html#a9337ce30f65285a708bcb91b12524c8">m_definiteLength</a>)<a name="l00472"></a>00472         {<a name="l00473"></a>00473                 <span class="keywordflow">if</span> (<a class="code" href="class_b_e_r_general_decoder.html#11096d3b64df9f0b3ff3d8d74be9b3c3">m_length</a> &lt; delta)<a name="l00474"></a>00474                         BERDecodeError();<a name="l00475"></a>00475                 <a class="code" href="class_b_e_r_general_decoder.html#11096d3b64df9f0b3ff3d8d74be9b3c3">m_length</a> -= delta;<a name="l00476"></a>00476         }<a name="l00477"></a>00477         <span class="keywordflow">return</span> delta;<a name="l00478"></a>00478 }<a name="l00479"></a>00479 <a name="l00480"></a><a class="code" href="class_d_e_r_general_encoder.html#7e0b7efea6616097595bc06769e60e73">00480</a> <a class="code" href="class_d_e_r_general_encoder.html#7e0b7efea6616097595bc06769e60e73">DERGeneralEncoder::DERGeneralEncoder</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;outQueue, byte asnTag)<a name="l00481"></a>00481         : m_outQueue(outQueue), <a class="code" href="class_b_e_r_general_decoder.html#5eb4279b5ed2b47bc9811d4bff81b532">m_finished</a>(false), m_asnTag(asnTag)<a name="l00482"></a>00482 {<a name="l00483"></a>00483 }<a name="l00484"></a>00484 <a name="l00485"></a><a class="code" href="class_d_e_r_general_encoder.html#572f7ca80b34eaae1355a39d1adfcaa1">00485</a> <a class="code" href="class_d_e_r_general_encoder.html#7e0b7efea6616097595bc06769e60e73">DERGeneralEncoder::DERGeneralEncoder</a>(<a class="code" href="class_d_e_r_general_encoder.html" title="DER General Encoder.">DERGeneralEncoder</a> &amp;outQueue, byte asnTag)<a name="l00486"></a>00486         : m_outQueue(outQueue), m_finished(false), m_asnTag(asnTag)<a name="l00487"></a>00487 {<a name="l00488"></a>00488 }<a name="l00489"></a>00489 <a name="l00490"></a><a class="code" href="class_d_e_r_general_encoder.html#2d046a37b6d2184d80b25f7d74e643c8">00490</a> <a class="code" href="class_d_e_r_general_encoder.html#2d046a37b6d2184d80b25f7d74e643c8">DERGeneralEncoder::~DERGeneralEncoder</a>()<a name="l00491"></a>00491 {<a name="l00492"></a>00492         <span class="keywordflow">try</span>     <span class="comment">// avoid throwing in constructor</span><a name="l00493"></a>00493         {<a name="l00494"></a>00494                 <span class="keywordflow">if</span> (!m_finished)<a name="l00495"></a>00495                         <a class="code" href="class_d_e_r_general_encoder.html#cb5f1a94ba97027c603b019bd5228510">MessageEnd</a>();<a name="l00496"></a>00496         }<a name="l00497"></a>00497         <span class="keywordflow">catch</span> (...)<a name="l00498"></a>00498         {<a name="l00499"></a>00499         }<a name="l00500"></a>00500 }<a name="l00501"></a>00501 <a name="l00502"></a><a class="code" href="class_d_e_r_general_encoder.html#cb5f1a94ba97027c603b019bd5228510">00502</a> <span class="keywordtype">void</span> <a class="code" href="class_d_e_r_general_encoder.html#cb5f1a94ba97027c603b019bd5228510">DERGeneralEncoder::MessageEnd</a>()<a name="l00503"></a>00503 {<a name="l00504"></a>00504         m_finished = <span class="keyword">true</span>;<a name="l00505"></a>00505         lword length = <a class="code" href="class_byte_queue.html#003ce4b0f9525589327800d0a14b455f">CurrentSize</a>();<a name="l00506"></a>00506         m_outQueue.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(m_asnTag);<a name="l00507"></a>00507         DERLengthEncode(m_outQueue, length);<a name="l00508"></a>00508         <a class="code" href="class_buffered_transformation.html#91c4526148274ae9cb68803bb2d2a2aa" title="move transferMax bytes of the buffered output to target as input">TransferTo</a>(m_outQueue);<a name="l00509"></a>00509 }<a name="l00510"></a>00510 <a name="l00511"></a>00511 <span class="comment">// *************************************************************</span><a name="l00512"></a>00512 <a name="l00513"></a><a class="code" href="class_x509_public_key.html#4eb86b0b55185f10a13ff7e1b083a67b">00513</a> <span class="keywordtype">void</span> <a class="code" href="class_x509_public_key.html#4eb86b0b55185f10a13ff7e1b083a67b" title="decode this object from a BufferedTransformation, using BER (Basic Encoding Rules)...">X509PublicKey::BERDecode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt)<a name="l00514"></a>00514 {<a name="l00515"></a>00515         <a class="code" href="class_b_e_r_sequence_decoder.html" title="BER Sequence Decoder.">BERSequenceDecoder</a> subjectPublicKeyInfo(bt);<a name="l00516"></a>00516                 <a class="code" href="class_b_e_r_sequence_decoder.html" title="BER Sequence Decoder.">BERSequenceDecoder</a> algorithm(subjectPublicKeyInfo);<a name="l00517"></a>00517                         GetAlgorithmID().<a class="code" href="class_o_i_d.html#525fbe10cb64751914dd6316ab5ea047">BERDecodeAndCheck</a>(algorithm);<a name="l00518"></a>00518                         <span class="keywordtype">bool</span> parametersPresent = algorithm.<a class="code" href="class_b_e_r_general_decoder.html#04f4fe90e88584b1cebffd32e149bfbc">EndReached</a>() ? <span class="keyword">false</span> : <a class="code" href="class_x509_public_key.html#faac7d84dc906dfaae2c13956531090e">BERDecodeAlgorithmParameters</a>(algorithm);<a name="l00519"></a>00519                 algorithm.<a class="code" href="class_b_e_r_general_decoder.html#40b14625c98ac7febb8ca218d02358ad">MessageEnd</a>();<a name="l00520"></a>00520 <a name="l00521"></a>00521                 <a class="code" href="class_b_e_r_general_decoder.html" title="BER General Decoder.">BERGeneralDecoder</a> subjectPublicKey(subjectPublicKeyInfo, BIT_STRING);<a name="l00522"></a>00522                         subjectPublicKey.<a class="code" href="class_b_e_r_general_decoder.html#f420c75709d4e5d8a5a1253ce458d882">CheckByte</a>(0);  <span class="comment">// unused bits</span><a name="l00523"></a>00523                         <a class="code" href="class_x509_public_key.html#3c60ac987c0d3c6aa537155946729c51" title="decode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header...">BERDecodePublicKey</a>(subjectPublicKey, parametersPresent, (<span class="keywordtype">size_t</span>)subjectPublicKey.<a class="code" href="class_b_e_r_general_decoder.html#0a404a30dc03b914c4f2eb0ebfcde74c">RemainingLength</a>());<a name="l00524"></a>00524                 subjectPublicKey.<a class="code" href="class_b_e_r_general_decoder.html#40b14625c98ac7febb8ca218d02358ad">MessageEnd</a>();<a name="l00525"></a>00525         subjectPublicKeyInfo.<a class="code" href="class_b_e_r_general_decoder.html#40b14625c98ac7febb8ca218d02358ad">MessageEnd</a>();<a name="l00526"></a>00526 }<a name="l00527"></a>00527 <a name="l00528"></a><a class="code" href="class_x509_public_key.html#dfd76c247053ce6f771411ea2b5a9ff5">00528</a> <span class="keywordtype">void</span> <a class="code" href="class_x509_public_key.html#dfd76c247053ce6f771411ea2b5a9ff5" title="encode this object into a BufferedTransformation, using DER (Distinguished Encoding...">X509PublicKey::DEREncode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span><a name="l00529"></a>00529 <span class="keyword"></span>{<a name="l00530"></a>00530         <a class="code" href="class_d_e_r_sequence_encoder.html" title="DER Sequence Encoder.">DERSequenceEncoder</a> subjectPublicKeyInfo(bt);<a name="l00531"></a>00531 <a name="l00532"></a>00532                 <a class="code" href="class_d_e_r_sequence_encoder.html" title="DER Sequence Encoder.">DERSequenceEncoder</a> algorithm(subjectPublicKeyInfo);<a name="l00533"></a>00533                         GetAlgorithmID().<a class="code" href="class_o_i_d.html#bd0adbb886e0f33f9017ab234b831ab7">DEREncode</a>(algorithm);<a name="l00534"></a>00534                         <a class="code" href="class_x509_public_key.html#6f8fc3dd61b545415b6980fd4f2122bd">DEREncodeAlgorithmParameters</a>(algorithm);<a name="l00535"></a>00535                 algorithm.<a class="code" href="class_d_e_r_general_encoder.html#cb5f1a94ba97027c603b019bd5228510">MessageEnd</a>();<a name="l00536"></a>00536 <a name="l00537"></a>00537                 <a class="code" href="class_d_e_r_general_encoder.html" title="DER General Encoder.">DERGeneralEncoder</a> subjectPublicKey(subjectPublicKeyInfo, BIT_STRING);<a name="l00538"></a>00538                         subjectPublicKey.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(0);        <span class="comment">// unused bits</span><a name="l00539"></a>00539                         <a class="code" href="class_x509_public_key.html#a8d06ad72e977bb175dabad152604d66" title="encode subjectPublicKey part of subjectPublicKeyInfo, without the BIT STRING header...">DEREncodePublicKey</a>(subjectPublicKey);<a name="l00540"></a>00540                 subjectPublicKey.<a class="code" href="class_d_e_r_general_encoder.html#cb5f1a94ba97027c603b019bd5228510">MessageEnd</a>();<a name="l00541"></a>00541 <a name="l00542"></a>00542         subjectPublicKeyInfo.<a class="code" href="class_d_e_r_general_encoder.html#cb5f1a94ba97027c603b019bd5228510">MessageEnd</a>();<a name="l00543"></a>00543 }<a name="l00544"></a>00544 <a name="l00545"></a><a class="code" href="class_p_k_c_s8_private_key.html#9ffab1c1391e4faf356668d8e2cd7d32">00545</a> <span class="keywordtype">void</span> <a class="code" href="class_p_k_c_s8_private_key.html#9ffab1c1391e4faf356668d8e2cd7d32" title="decode this object from a BufferedTransformation, using BER (Basic Encoding Rules)...">PKCS8PrivateKey::BERDecode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt)<a name="l00546"></a>00546 {<a name="l00547"></a>00547         <a class="code" href="class_b_e_r_sequence_decoder.html" title="BER Sequence Decoder.">BERSequenceDecoder</a> privateKeyInfo(bt);<a name="l00548"></a>00548                 word32 version;<a name="l00549"></a>00549                 BERDecodeUnsigned&lt;word32&gt;(privateKeyInfo, version, INTEGER, 0, 0);      <span class="comment">// check version</span><a name="l00550"></a>00550 <a name="l00551"></a>00551                 <a class="code" href="class_b_e_r_sequence_decoder.html" title="BER Sequence Decoder.">BERSequenceDecoder</a> algorithm(privateKeyInfo);<a name="l00552"></a>00552                         GetAlgorithmID().<a class="code" href="class_o_i_d.html#525fbe10cb64751914dd6316ab5ea047">BERDecodeAndCheck</a>(algorithm);<a name="l00553"></a>00553                         <span class="keywordtype">bool</span> parametersPresent = algorithm.EndReached() ? <span class="keyword">false</span> : <a class="code" href="class_p_k_c_s8_private_key.html#210f9b83d457ba4821c2966984e9b552">BERDecodeAlgorithmParameters</a>(algorithm);<a name="l00554"></a>00554                 algorithm.MessageEnd();<a name="l00555"></a>00555 <a name="l00556"></a>00556                 <a class="code" href="class_b_e_r_general_decoder.html" title="BER General Decoder.">BERGeneralDecoder</a> octetString(privateKeyInfo, OCTET_STRING);<a name="l00557"></a>00557                         <a class="code" href="class_p_k_c_s8_private_key.html#b759ba85c01e99203f08da6084d61318" title="decode privateKey part of privateKeyInfo, without the OCTET STRING header">BERDecodePrivateKey</a>(octetString, parametersPresent, (<span class="keywordtype">size_t</span>)privateKeyInfo.<a class="code" href="class_b_e_r_general_decoder.html#0a404a30dc03b914c4f2eb0ebfcde74c">RemainingLength</a>());<a name="l00558"></a>00558                 octetString.<a class="code" href="class_b_e_r_general_decoder.html#40b14625c98ac7febb8ca218d02358ad">MessageEnd</a>();<a name="l00559"></a>00559 <a name="l00560"></a>00560                 <span class="keywordflow">if</span> (!privateKeyInfo.EndReached())<a name="l00561"></a>00561                         <a class="code" href="class_p_k_c_s8_private_key.html#55301b3f97993d9bb2dd7dcf48f35aa6" title="decode optional attributes including context-specific tag">BERDecodeOptionalAttributes</a>(privateKeyInfo);<a name="l00562"></a>00562         privateKeyInfo.MessageEnd();<a name="l00563"></a>00563 }<a name="l00564"></a>00564 <a name="l00565"></a><a class="code" href="class_p_k_c_s8_private_key.html#83e4531f1f514441107a1f35274589b8">00565</a> <span class="keywordtype">void</span> <a class="code" href="class_p_k_c_s8_private_key.html#83e4531f1f514441107a1f35274589b8" title="encode this object into a BufferedTransformation, using DER (Distinguished Encoding...">PKCS8PrivateKey::DEREncode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span><a name="l00566"></a>00566 <span class="keyword"></span>{<a name="l00567"></a>00567         <a class="code" href="class_d_e_r_sequence_encoder.html" title="DER Sequence Encoder.">DERSequenceEncoder</a> privateKeyInfo(bt);<a name="l00568"></a>00568     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -