📄 asn_8cpp-source.html
字号:
<a name="l00098"></a>00098 <span class="keywordflow">if</span> (!BERLengthDecode(in, length) || length != 0)<a name="l00099"></a>00099 BERDecodeError();<a name="l00100"></a>00100 }<a name="l00101"></a>00101 <span class="comment"></span><a name="l00102"></a>00102 <span class="comment">/// ASN Strings</span><a name="l00103"></a>00103 <span class="comment"></span><span class="keywordtype">size_t</span> DEREncodeOctetString(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt, <span class="keyword">const</span> byte *str, <span class="keywordtype">size_t</span> strLen)<a name="l00104"></a>00104 {<a name="l00105"></a>00105 bt.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(OCTET_STRING);<a name="l00106"></a>00106 <span class="keywordtype">size_t</span> lengthBytes = DERLengthEncode(bt, strLen);<a name="l00107"></a>00107 bt.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(str, strLen);<a name="l00108"></a>00108 <span class="keywordflow">return</span> 1+lengthBytes+strLen;<a name="l00109"></a>00109 }<a name="l00110"></a>00110 <a name="l00111"></a>00111 <span class="keywordtype">size_t</span> DEREncodeOctetString(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt, <span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &str)<a name="l00112"></a>00112 {<a name="l00113"></a>00113 <span class="keywordflow">return</span> DEREncodeOctetString(bt, str.<a class="code" href="class_sec_block.html#11a05906688172579cd3520816799446">begin</a>(), str.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00114"></a>00114 }<a name="l00115"></a>00115 <a name="l00116"></a>00116 <span class="keywordtype">size_t</span> BERDecodeOctetString(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt, <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &str)<a name="l00117"></a>00117 {<a name="l00118"></a>00118 byte b;<a name="l00119"></a>00119 <span class="keywordflow">if</span> (!bt.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(b) || b != OCTET_STRING)<a name="l00120"></a>00120 BERDecodeError();<a name="l00121"></a>00121 <a name="l00122"></a>00122 <span class="keywordtype">size_t</span> bc;<a name="l00123"></a>00123 <span class="keywordflow">if</span> (!BERLengthDecode(bt, bc))<a name="l00124"></a>00124 BERDecodeError();<a name="l00125"></a>00125 <a name="l00126"></a>00126 str.<a class="code" href="class_sec_block.html#f9e98d3f4a7af1156fcf3e6e68f4ae5a" title="change size and preserve contents">resize</a>(bc);<a name="l00127"></a>00127 <span class="keywordflow">if</span> (bc != bt.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(str, bc))<a name="l00128"></a>00128 BERDecodeError();<a name="l00129"></a>00129 <span class="keywordflow">return</span> bc;<a name="l00130"></a>00130 }<a name="l00131"></a>00131 <a name="l00132"></a>00132 <span class="keywordtype">size_t</span> BERDecodeOctetString(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt, <a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &str)<a name="l00133"></a>00133 {<a name="l00134"></a>00134 byte b;<a name="l00135"></a>00135 <span class="keywordflow">if</span> (!bt.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(b) || b != OCTET_STRING)<a name="l00136"></a>00136 BERDecodeError();<a name="l00137"></a>00137 <a name="l00138"></a>00138 <span class="keywordtype">size_t</span> bc;<a name="l00139"></a>00139 <span class="keywordflow">if</span> (!BERLengthDecode(bt, bc))<a name="l00140"></a>00140 BERDecodeError();<a name="l00141"></a>00141 <a name="l00142"></a>00142 bt.<a class="code" href="class_buffered_transformation.html#91c4526148274ae9cb68803bb2d2a2aa" title="move transferMax bytes of the buffered output to target as input">TransferTo</a>(str, bc);<a name="l00143"></a>00143 <span class="keywordflow">return</span> bc;<a name="l00144"></a>00144 }<a name="l00145"></a>00145 <a name="l00146"></a>00146 <span class="keywordtype">size_t</span> DEREncodeTextString(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt, <span class="keyword">const</span> std::string &str, byte asnTag)<a name="l00147"></a>00147 {<a name="l00148"></a>00148 bt.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(asnTag);<a name="l00149"></a>00149 <span class="keywordtype">size_t</span> lengthBytes = DERLengthEncode(bt, str.size());<a name="l00150"></a>00150 bt.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>((<span class="keyword">const</span> byte *)str.data(), str.size());<a name="l00151"></a>00151 <span class="keywordflow">return</span> 1+lengthBytes+str.size();<a name="l00152"></a>00152 }<a name="l00153"></a>00153 <a name="l00154"></a>00154 <span class="keywordtype">size_t</span> BERDecodeTextString(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt, std::string &str, byte asnTag)<a name="l00155"></a>00155 {<a name="l00156"></a>00156 byte b;<a name="l00157"></a>00157 <span class="keywordflow">if</span> (!bt.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(b) || b != asnTag)<a name="l00158"></a>00158 BERDecodeError();<a name="l00159"></a>00159 <a name="l00160"></a>00160 <span class="keywordtype">size_t</span> bc;<a name="l00161"></a>00161 <span class="keywordflow">if</span> (!BERLengthDecode(bt, bc))<a name="l00162"></a>00162 BERDecodeError();<a name="l00163"></a>00163 <a name="l00164"></a>00164 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> temp(bc);<a name="l00165"></a>00165 <span class="keywordflow">if</span> (bc != bt.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(temp, bc))<a name="l00166"></a>00166 BERDecodeError();<a name="l00167"></a>00167 str.assign((<span class="keywordtype">char</span> *)temp.begin(), bc);<a name="l00168"></a>00168 <span class="keywordflow">return</span> bc;<a name="l00169"></a>00169 }<a name="l00170"></a>00170 <span class="comment"></span><a name="l00171"></a>00171 <span class="comment">/// ASN BitString</span><a name="l00172"></a>00172 <span class="comment"></span><span class="keywordtype">size_t</span> DEREncodeBitString(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt, <span class="keyword">const</span> byte *str, <span class="keywordtype">size_t</span> strLen, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> unusedBits)<a name="l00173"></a>00173 {<a name="l00174"></a>00174 bt.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(BIT_STRING);<a name="l00175"></a>00175 <span class="keywordtype">size_t</span> lengthBytes = DERLengthEncode(bt, strLen+1);<a name="l00176"></a>00176 bt.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>((byte)unusedBits);<a name="l00177"></a>00177 bt.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(str, strLen);<a name="l00178"></a>00178 <span class="keywordflow">return</span> 2+lengthBytes+strLen;<a name="l00179"></a>00179 }<a name="l00180"></a>00180 <a name="l00181"></a>00181 <span class="keywordtype">size_t</span> BERDecodeBitString(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt, <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &unusedBits)<a name="l00182"></a>00182 {<a name="l00183"></a>00183 byte b;<a name="l00184"></a>00184 <span class="keywordflow">if</span> (!bt.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(b) || b != BIT_STRING)<a name="l00185"></a>00185 BERDecodeError();<a name="l00186"></a>00186 <a name="l00187"></a>00187 <span class="keywordtype">size_t</span> bc;<a name="l00188"></a>00188 <span class="keywordflow">if</span> (!BERLengthDecode(bt, bc))<a name="l00189"></a>00189 BERDecodeError();<a name="l00190"></a>00190 <a name="l00191"></a>00191 byte unused;<a name="l00192"></a>00192 <span class="keywordflow">if</span> (!bt.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(unused))<a name="l00193"></a>00193 BERDecodeError();<a name="l00194"></a>00194 unusedBits = unused;<a name="l00195"></a>00195 str.<a class="code" href="class_sec_block.html#f9e98d3f4a7af1156fcf3e6e68f4ae5a" title="change size and preserve contents">resize</a>(bc-1);<a name="l00196"></a>00196 <span class="keywordflow">if</span> ((bc-1) != bt.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(str, bc-1))<a name="l00197"></a>00197 BERDecodeError();<a name="l00198"></a>00198 <span class="keywordflow">return</span> bc-1;<a name="l00199"></a>00199 }<a name="l00200"></a>00200 <a name="l00201"></a>00201 <span class="keywordtype">void</span> DERReencode(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &source, <a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &dest)<a name="l00202"></a>00202 {<a name="l00203"></a>00203 byte tag;<a name="l00204"></a>00204 source.<a class="code" href="class_buffered_transformation.html#5fa048faf8c043ad57ae0a8911070090" title="peek at the next byte without removing it from the output buffer">Peek</a>(tag);<a name="l00205"></a>00205 <a class="code" href="class_b_e_r_general_decoder.html" title="BER General Decoder.">BERGeneralDecoder</a> decoder(source, tag);<a name="l00206"></a>00206 <a class="code" href="class_d_e_r_general_encoder.html" title="DER General Encoder.">DERGeneralEncoder</a> encoder(dest, tag);<a name="l00207"></a>00207 <span class="keywordflow">if</span> (decoder.IsDefiniteLength())<a name="l00208"></a>00208 decoder.TransferTo(encoder, decoder.RemainingLength());<a name="l00209"></a>00209 <span class="keywordflow">else</span><a name="l00210"></a>00210 {<a name="l00211"></a>00211 <span class="keywordflow">while</span> (!decoder.EndReached())<a name="l00212"></a>00212 DERReencode(decoder, encoder);<a name="l00213"></a>00213 }<a name="l00214"></a>00214 decoder.MessageEnd();<a name="l00215"></a>00215 encoder.MessageEnd();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -