integer_8h-source.html

来自「Crypto++是一个非常强大的密码学库,主要是功能全」· HTML 代码 · 共 454 行 · 第 1/4 页

HTML
454
字号
00108 <span class="comment"></span>                Integer(<span class="keyword">const</span> byte *encodedInteger, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> byteCount, Signedness s=UNSIGNED);00109 <span class="comment"></span>00110 <span class="comment">                //! convert from big-endian form stored in a BufferedTransformation</span>00111 <span class="comment"></span>                Integer(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> byteCount, Signedness s=UNSIGNED);00112 <span class="comment"></span>00113 <span class="comment">                //! convert from BER encoded byte array stored in a BufferedTransformation object</span>00114 <span class="comment"></span>                <span class="keyword">explicit</span> Integer(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt);00115 <span class="comment"></span>00116 <span class="comment">                //! create a random integer</span>00117 <span class="comment"></span><span class="comment">                /*! The random integer created is uniformly distributed over [0, 2**bitcount). */</span>00118                 Integer(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bitcount);00119 <span class="comment"></span>00120 <span class="comment">                //! avoid calling constructors for these frequently used integers</span>00121 <span class="comment"></span>                <span class="keyword">static</span> <span class="keyword">const</span> Integer &amp; Zero();<span class="comment"></span>00122 <span class="comment">                //! avoid calling constructors for these frequently used integers</span>00123 <span class="comment"></span>                <span class="keyword">static</span> <span class="keyword">const</span> Integer &amp; One();<span class="comment"></span>00124 <span class="comment">                //! avoid calling constructors for these frequently used integers</span>00125 <span class="comment"></span>                <span class="keyword">static</span> <span class="keyword">const</span> Integer &amp; Two();00126 <span class="comment"></span>00127 <span class="comment">                //! create a random integer of special type</span>00128 <span class="comment"></span><span class="comment">                /*! Ideally, the random integer created should be uniformly distributed</span>00129 <span class="comment">                        over {x | min &lt;= x &lt;= max and x is of rnType and x % mod == equiv}.</span>00130 <span class="comment">                        However the actual distribution may not be uniform because sequential</span>00131 <span class="comment">                        search is used to find an appropriate number from a random starting</span>00132 <span class="comment">                        point.</span>00133 <span class="comment">                        May return (with very small probability) a pseudoprime when a prime</span>00134 <span class="comment">                        is requested and max &gt; lastSmallPrime*lastSmallPrime (lastSmallPrime</span>00135 <span class="comment">                        is declared in nbtheory.h).</span>00136 <span class="comment">                        \throw RandomNumberNotFound if the set is empty.</span>00137 <span class="comment">                */</span>00138                 Integer(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> Integer &amp;min, <span class="keyword">const</span> Integer &amp;max, RandomNumberType rnType=ANY, <span class="keyword">const</span> Integer &amp;equiv=Zero(), <span class="keyword">const</span> Integer &amp;mod=One());00139 <span class="comment"></span>00140 <span class="comment">                //! return the integer 2**e</span>00141 <span class="comment"></span>                <span class="keyword">static</span> Integer Power2(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> e);<span class="comment"></span>00142 <span class="comment">        //@}</span>00143 <span class="comment"></span><span class="comment"></span>00144 <span class="comment">        //! \name ENCODE/DECODE</span>00145 <span class="comment"></span><span class="comment">        //@{</span>00146 <span class="comment"></span><span class="comment">                //! minimum number of bytes to encode this integer</span>00147 <span class="comment"></span><span class="comment">                /*! MinEncodedSize of 0 is 1 */</span>00148                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MinEncodedSize(Signedness=UNSIGNED) <span class="keyword">const</span>;<span class="comment"></span>00149 <span class="comment">                //! encode in big-endian format</span>00150 <span class="comment"></span><span class="comment">                /*! unsigned means encode absolute value, signed means encode two's complement if negative.</span>00151 <span class="comment">                        if outputLen &lt; MinEncodedSize, the most significant bytes will be dropped</span>00152 <span class="comment">                        if outputLen &gt; MinEncodedSize, the most significant bytes will be padded</span>00153 <span class="comment">                */</span>00154                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Encode(byte *output, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputLen, Signedness=UNSIGNED) <span class="keyword">const</span>;<span class="comment"></span>00155 <span class="comment">                //!</span>00156 <span class="comment"></span>                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Encode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputLen, Signedness=UNSIGNED) <span class="keyword">const</span>;00157 <span class="comment"></span>00158 <span class="comment">                //! encode using Distinguished Encoding Rules, put result into a BufferedTransformation object</span>00159 <span class="comment"></span>                <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> &amp;bt) <span class="keyword">const</span>;00160 <span class="comment"></span>00161 <span class="comment">                //! encode absolute value as big-endian octet string</span>00162 <span class="comment"></span>                <span class="keywordtype">void</span> DEREncodeAsOctetString(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length) <span class="keyword">const</span>;00163 <span class="comment"></span>00164 <span class="comment">                //! encode absolute value in OpenPGP format, return length of output</span>00165 <span class="comment"></span>                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> OpenPGPEncode(byte *output, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferSize) <span class="keyword">const</span>;<span class="comment"></span>00166 <span class="comment">                //! encode absolute value in OpenPGP format, put result into a BufferedTransformation object</span>00167 <span class="comment"></span>                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> OpenPGPEncode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span>;00168 <span class="comment"></span>00169 <span class="comment">                //!</span>00170 <span class="comment"></span>                <span class="keywordtype">void</span> Decode(<span class="keyword">const</span> byte *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputLen, Signedness=UNSIGNED);<span class="comment"></span>00171 <span class="comment">                //! </span>00172 <span class="comment"></span>                <span class="comment">//* Precondition: bt.MaxRetrievable() &gt;= inputLen</span>00173                 <span class="keywordtype">void</span> Decode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputLen, Signedness=UNSIGNED);00174 <span class="comment"></span>00175 <span class="comment">                //!</span>00176 <span class="comment"></span>                <span class="keywordtype">void</span> <a class="code" href="class_a_s_n1_object.html#_a_s_n1_objecta1">BERDecode</a>(<span class="keyword">const</span> byte *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputLen);<span class="comment"></span>00177 <span class="comment">                //!</span>00178 <span class="comment"></span>                <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> &amp;bt);00179 <span class="comment"></span>00180 <span class="comment">                //! decode nonnegative value as big-endian octet string</span>00181 <span class="comment"></span>                <span class="keywordtype">void</span> BERDecodeAsOctetString(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length);00182 00183                 <span class="keyword">class </span>OpenPGPDecodeErr : <span class="keyword">public</span> <a class="code" href="class_exception.html">Exception</a>00184                 {00185                 <span class="keyword">public</span>: 00186                         OpenPGPDecodeErr() : <a class="code" href="class_exception.html">Exception</a>(INVALID_DATA_FORMAT, "OpenPGP decode error") {}00187                 };00188 <span class="comment"></span>00189 <span class="comment">                //!</span>00190 <span class="comment"></span>                <span class="keywordtype">void</span> OpenPGPDecode(<span class="keyword">const</span> byte *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputLen);<span class="comment"></span>00191 <span class="comment">                //!</span>00192 <span class="comment"></span>                <span class="keywordtype">void</span> OpenPGPDecode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt);<span class="comment"></span>00193 <span class="comment">        //@}</span>00194 <span class="comment"></span><span class="comment"></span>00195 <span class="comment">        //! \name ACCESSORS</span>00196 <span class="comment"></span><span class="comment">        //@{</span>00197 <span class="comment"></span><span class="comment">                //! return true if *this can be represented as a signed long</span>00198 <span class="comment"></span>                <span class="keywordtype">bool</span> IsConvertableToLong() <span class="keyword">const</span>;<span class="comment"></span>00199 <span class="comment">                //! return equivalent signed long if possible, otherwise undefined</span>00200 <span class="comment"></span>                <span class="keywordtype">signed</span> <span class="keywordtype">long</span> ConvertToLong() <span class="keyword">const</span>;00201 <span class="comment"></span>00202 <span class="comment">                //! number of significant bits = floor(log2(abs(*this))) + 1</span>00203 <span class="comment"></span>                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> BitCount() <span class="keyword">const</span>;<span class="comment"></span>00204 <span class="comment">                //! number of significant bytes = ceiling(BitCount()/8)</span>00205 <span class="comment"></span>                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ByteCount() <span class="keyword">const</span>;<span class="comment"></span>00206 <span class="comment">                //! number of significant words = ceiling(ByteCount()/sizeof(word))</span>00207 <span class="comment"></span>                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> WordCount() <span class="keyword">const</span>;00208 <span class="comment"></span>00209 <span class="comment">                //! return the i-th bit, i=0 being the least significant bit</span>00210 <span class="comment"></span>                <span class="keywordtype">bool</span> GetBit(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) <span class="keyword">const</span>;<span class="comment"></span>00211 <span class="comment">                //! return the i-th byte</span>00212 <span class="comment"></span>                byte GetByte(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) <span class="keyword">const</span>;<span class="comment"></span>00213 <span class="comment">                //! return n lowest bits of *this &gt;&gt; i</span>00214 <span class="comment"></span>                <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetBits(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n) <span class="keyword">const</span>;00215 <span class="comment"></span>00216 <span class="comment">                //!</span>00217 <span class="comment"></span>                <span class="keywordtype">bool</span> IsZero()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !*<span class="keyword">this</span>;}<span class="comment"></span>00218 <span class="comment">                //!</span>00219 <span class="comment"></span>                <span class="keywordtype">bool</span> NotZero()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !IsZero();}<span class="comment"></span>00220 <span class="comment">                //!</span>00221 <span class="comment"></span>                <span class="keywordtype">bool</span> IsNegative()<span class="keyword"> const </span>{<span class="keywordflow">return</span> sign == NEGATIVE;}<span class="comment"></span>

⌨️ 快捷键说明

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