|
Crypto++
5.6.5
Free C++ class library of cryptographic schemes
|
Multiple precision integer with arithmetic operations. More...
Inheritance diagram for Integer:Classes | |
| class | DivideByZero |
| Exception thrown when division by 0 is encountered. More... | |
| class | OpenPGPDecodeErr |
| Exception thrown when an error is encountered decoding an OpenPGP integer. More... | |
| class | RandomNumberNotFound |
| Exception thrown when a random number cannot be found that satisfies the condition. More... | |
ENUMS, EXCEPTIONS, and TYPEDEFS | |
| enum | Sign { POSITIVE =0, NEGATIVE =1 } |
| Used internally to represent the integer. More... | |
| enum | Signedness { UNSIGNED, SIGNED } |
| Used when importing and exporting integers. More... | |
| enum | RandomNumberType { ANY, PRIME } |
| Properties of a random integer. More... | |
CREATORS | |
| Integer () | |
| Creates the zero integer. | |
| Integer (const Integer &t) | |
| copy constructor | |
| Integer (signed long value) | |
| Convert from signed long. | |
| Integer (Sign sign, lword value) | |
| Convert from lword. More... | |
| Integer (Sign sign, word highWord, word lowWord) | |
| Convert from two words. More... | |
| Integer (const char *str, ByteOrder order=BIG_ENDIAN_ORDER) | |
| Convert from a C-string. More... | |
| Integer (const wchar_t *str, ByteOrder order=BIG_ENDIAN_ORDER) | |
| Convert from a wide C-string. More... | |
| Integer (const byte *encodedInteger, size_t byteCount, Signedness sign=UNSIGNED, ByteOrder order=BIG_ENDIAN_ORDER) | |
| Convert from a big-endian byte array. More... | |
| Integer (BufferedTransformation &bt, size_t byteCount, Signedness sign=UNSIGNED, ByteOrder order=BIG_ENDIAN_ORDER) | |
| Convert from a big-endian array. More... | |
| Integer (BufferedTransformation &bt) | |
| Convert from a BER encoded byte array. More... | |
| Integer (RandomNumberGenerator &rng, size_t bitCount) | |
| Create a random integer. More... | |
| Integer (RandomNumberGenerator &rng, const Integer &min, const Integer &max, RandomNumberType rnType=ANY, const Integer &equiv=Zero(), const Integer &mod=One()) | |
| Create a random integer of special form. More... | |
| static const Integer & | Zero () |
| Integer representing 0. More... | |
| static const Integer & | One () |
| Integer representing 1. More... | |
| static const Integer & | Two () |
| Integer representing 2. More... | |
| static Integer | Power2 (size_t e) |
| Exponentiates to a power of 2. More... | |
ENCODE/DECODE | |
| size_t | MinEncodedSize (Signedness sign=UNSIGNED) const |
| The minimum number of bytes to encode this integer. More... | |
| void | Encode (byte *output, size_t outputLen, Signedness sign=UNSIGNED) const |
| Encode in big-endian format. More... | |
| void | Encode (BufferedTransformation &bt, size_t outputLen, Signedness sign=UNSIGNED) const |
| Encode in big-endian format. More... | |
| void | DEREncode (BufferedTransformation &bt) const |
| Encode in DER format. More... | |
| void | DEREncodeAsOctetString (BufferedTransformation &bt, size_t length) const |
| encode absolute value as big-endian octet string More... | |
| size_t | OpenPGPEncode (byte *output, size_t bufferSize) const |
| Encode absolute value in OpenPGP format. More... | |
| size_t | OpenPGPEncode (BufferedTransformation &bt) const |
| Encode absolute value in OpenPGP format. More... | |
| void | Decode (const byte *input, size_t inputLen, Signedness sign=UNSIGNED) |
| Decode from big-endian byte array. More... | |
| void | Decode (BufferedTransformation &bt, size_t inputLen, Signedness sign=UNSIGNED) |
| Decode nonnegative value from big-endian byte array. More... | |
| void | BERDecode (const byte *input, size_t inputLen) |
| Decode from BER format. More... | |
| void | BERDecode (BufferedTransformation &bt) |
| Decode from BER format. More... | |
| void | BERDecodeAsOctetString (BufferedTransformation &bt, size_t length) |
| Decode nonnegative value from big-endian octet string. More... | |
| void | OpenPGPDecode (const byte *input, size_t inputLen) |
| Decode from OpenPGP format. More... | |
| void | OpenPGPDecode (BufferedTransformation &bt) |
| Decode from OpenPGP format. More... | |
ACCESSORS | |
| bool | IsConvertableToLong () const |
| Determines if the Integer is convertable to Long. More... | |
| signed long | ConvertToLong () const |
| Convert the Integer to Long. More... | |
| unsigned int | BitCount () const |
| Determines the number of bits required to represent the Integer. More... | |
| unsigned int | ByteCount () const |
| Determines the number of bytes required to represent the Integer. More... | |
| unsigned int | WordCount () const |
| Determines the number of words required to represent the Integer. More... | |
| bool | GetBit (size_t i) const |
| Provides the i-th bit of the Integer. More... | |
| byte | GetByte (size_t i) const |
| Provides the i-th byte of the Integer. More... | |
| lword | GetBits (size_t i, size_t n) const |
| Provides the low order bits of the Integer. More... | |
| bool | IsZero () const |
| Determines if the Integer is 0. More... | |
| bool | NotZero () const |
| Determines if the Integer is non-0. More... | |
| bool | IsNegative () const |
| Determines if the Integer is negative. More... | |
| bool | NotNegative () const |
| Determines if the Integer is non-negative. More... | |
| bool | IsPositive () const |
| Determines if the Integer is positive. More... | |
| bool | NotPositive () const |
| Determines if the Integer is non-positive. More... | |
| bool | IsEven () const |
| Determines if the Integer is even parity. More... | |
| bool | IsOdd () const |
| Determines if the Integer is odd parity. More... | |
MANIPULATORS | |
| Integer & | operator= (const Integer &t) |
| Integer & | operator+= (const Integer &t) |
| Integer & | operator-= (const Integer &t) |
| Integer & | operator*= (const Integer &t) |
| Integer & | operator/= (const Integer &t) |
| Integer & | operator%= (const Integer &t) |
| Integer & | operator/= (word t) |
| Integer & | operator%= (word t) |
| Integer & | operator<<= (size_t) |
| Integer & | operator>>= (size_t) |
| void | Randomize (RandomNumberGenerator &rng, size_t bitCount) |
| Set this Integer to random integer. More... | |
| void | Randomize (RandomNumberGenerator &rng, const Integer &min, const Integer &max) |
| Set this Integer to random integer. More... | |
| bool | Randomize (RandomNumberGenerator &rng, const Integer &min, const Integer &max, RandomNumberType rnType, const Integer &equiv=Zero(), const Integer &mod=One()) |
| Set this Integer to random integer of special form. More... | |
| bool | GenerateRandomNoThrow (RandomNumberGenerator &rng, const NameValuePairs ¶ms=g_nullNameValuePairs) |
| void | GenerateRandom (RandomNumberGenerator &rng, const NameValuePairs ¶ms=g_nullNameValuePairs) |
| void | SetBit (size_t n, bool value=1) |
| Set the n-th bit to value. More... | |
| void | SetByte (size_t n, byte value) |
| Set the n-th byte to value. More... | |
| void | Negate () |
| Reverse the Sign of the Integer. | |
| void | SetPositive () |
| Sets the Integer to positive. | |
| void | SetNegative () |
| Sets the Integer to negative. | |
| void | swap (Integer &a) |
| Swaps this Integer with another Integer. | |
UNARY OPERATORS | |
| bool | operator! () const |
| Integer | operator+ () const |
| Integer | operator- () const |
| Integer & | operator++ () |
| Integer & | operator-- () |
| Integer | operator++ (int) |
| Integer | operator-- (int) |
BINARY OPERATORS | |
| int | Compare (const Integer &a) const |
| Perform signed comparison. More... | |
| Integer | Plus (const Integer &b) const |
| Integer | Minus (const Integer &b) const |
| Integer | Times (const Integer &b) const |
| Integer | DividedBy (const Integer &b) const |
| Integer | Modulo (const Integer &b) const |
| Integer | DividedBy (word b) const |
| word | Modulo (word b) const |
| Integer | operator>> (size_t n) const |
| Integer | operator<< (size_t n) const |
OTHER ARITHMETIC FUNCTIONS | |
| Integer | AbsoluteValue () const |
| Integer | Doubled () const |
| Integer | Squared () const |
| Integer | SquareRoot () const |
| extract square root, if negative return 0, else return floor of square root | |
| bool | IsSquare () const |
| return whether this integer is a perfect square | |
| bool | IsUnit () const |
| is 1 or -1 | |
| Integer | MultiplicativeInverse () const |
| return inverse if 1 or -1, otherwise return 0 | |
| Integer | InverseMod (const Integer &n) const |
| calculate multiplicative inverse of *this mod n More... | |
| word | InverseMod (word n) const |
| static void | Divide (Integer &r, Integer &q, const Integer &a, const Integer &d) |
| calculate r and q such that (a == d*q + r) && (0 <= r < abs(d)) | |
| static void | Divide (word &r, Integer &q, const Integer &a, word d) |
| use a faster division algorithm when divisor is short | |
| static void | DivideByPowerOf2 (Integer &r, Integer &q, const Integer &a, unsigned int n) |
| returns same result as Divide(r, q, a, Power2(n)), but faster | |
| static Integer | Gcd (const Integer &a, const Integer &n) |
| greatest common divisor | |
INPUT/OUTPUT | |
| std::istream & | operator>> (std::istream &in, Integer &a) |
| Extraction operator. More... | |
| std::ostream & | operator<< (std::ostream &out, const Integer &a) |
| Insertion operator. More... | |
Additional Inherited Members | |
Public Member Functions inherited from ASN1Object | |
| virtual void | BEREncode (BufferedTransformation &bt) const |
| Encode this object into a BufferedTransformation. More... | |
Multiple precision integer with arithmetic operations.
The Integer class can represent positive and negative integers with absolute value less than (256**sizeof(word))(256**sizeof(int)). Internally, the library uses a sign magnitude representation, and the class has two data members. The first is a IntegerSecBlock (a SecBlock<word>) and it is used to hold the representation. The second is a Sign, and its is used to track the sign of the Integer.
| enum Integer::Sign |
Used internally to represent the integer.
Sign is used internally to represent the integer. It is also used in a few API functions.
| Enumerator | |
|---|---|
| POSITIVE | the value is positive or 0 |
| NEGATIVE | the value is negative |
| enum Integer::Signedness |
| Integer::Integer | ( | Sign | sign, |
| lword | value | ||
| ) |
Convert from lword.
| sign | enumeration indicating Sign |
| value | the long word |
Definition at line 2909 of file integer.cpp.
| Integer::Integer | ( | Sign | sign, |
| word | highWord, | ||
| word | lowWord | ||
| ) |
Convert from two words.
| sign | enumeration indicating Sign |
| highWord | the high word |
| lowWord | the low word |
Definition at line 2930 of file integer.cpp.
|
explicit |
Convert from a C-string.
| str | C-string value |
| order | byte order str can be in base 2, 8, 10, or 16. Base is determined by a case insensitive suffix of 'h', 'o', or 'b'. No suffix means base 10. Byte order was added at Crypto++ 5.7 to allow use of little-endian integers with curve25519, Poly1305 and Microsoft CAPI. |
Definition at line 3284 of file integer.cpp.
|
explicit |
Convert from a wide C-string.
| str | wide C-string value |
| order | byte order str can be in base 2, 8, 10, or 16. Base is determined by a case insensitive suffix of 'h', 'o', or 'b'. No suffix means base 10. Byte order was added at Crypto++ 5.7 to allow use of little-endian integers with curve25519, Poly1305 and Microsoft CAPI. |
Definition at line 3290 of file integer.cpp.
| Integer::Integer | ( | const byte * | encodedInteger, |
| size_t | byteCount, | ||
| Signedness | sign = UNSIGNED, |
||
| ByteOrder | order = BIG_ENDIAN_ORDER |
||
| ) |
Convert from a big-endian byte array.
| encodedInteger | big-endian byte array |
| byteCount | length of the byte array |
| sign | enumeration indicating Signedness |
| order | byte order Byte order was added at Crypto++ 5.7 to allow use of little-endian integers with curve25519, Poly1305 and Microsoft CAPI. |
Definition at line 2977 of file integer.cpp.
| Integer::Integer | ( | BufferedTransformation & | bt, |
| size_t | byteCount, | ||
| Signedness | sign = UNSIGNED, |
||
| ByteOrder | order = BIG_ENDIAN_ORDER |
||
| ) |
Convert from a big-endian array.
| bt | BufferedTransformation object with big-endian byte array |
| byteCount | length of the byte array |
| sign | enumeration indicating Signedness |
| order | byte order Byte order was added at Crypto++ 5.7 to allow use of little-endian integers with curve25519, Poly1305 and Microsoft CAPI. |
Definition at line 2960 of file integer.cpp.
|
explicit |
Convert from a BER encoded byte array.
| bt | BufferedTransformation object with BER encoded byte array |
Definition at line 2997 of file integer.cpp.
| Integer::Integer | ( | RandomNumberGenerator & | rng, |
| size_t | bitCount | ||
| ) |
Create a random integer.
| rng | RandomNumberGenerator used to generate material |
| bitCount | the number of bits in the resulting integer The random integer created is uniformly distributed over [0, 2bitCount]. |
Definition at line 3002 of file integer.cpp.
| Integer::Integer | ( | RandomNumberGenerator & | rng, |
| const Integer & | min, | ||
| const Integer & | max, | ||
| RandomNumberType | rnType = ANY, |
||
| const Integer & | equiv = Zero(), |
||
| const Integer & | mod = One() |
||
| ) |
Create a random integer of special form.
| rng | RandomNumberGenerator used to generate material |
| min | the minimum value |
| max | the maximum value |
| rnType | RandomNumberType to specify the type |
| equiv | the equivalence class based on the parameter mod |
| mod | the modulus used to reduce the equivalence class |
| RandomNumberNotFound | if the set is empty. Ideally, the random integer created should be uniformly distributed over {x | min <= x <= max and x is of rnType and x % mod == equiv}. However the actual distribution may not be uniform because sequential search is used to find an appropriate number from a random starting point. May return (with very small probability) a pseudoprime when a prime is requested and max > lastSmallPrime*lastSmallPrime. lastSmallPrime is declared in nbtheory.h. |
Definition at line 3007 of file integer.cpp.
|
static |
Integer representing 0.
Definition at line 3032 of file integer.cpp.
|
static |
Integer representing 1.
Definition at line 3040 of file integer.cpp.
|
static |
Integer representing 2.
Definition at line 3048 of file integer.cpp.
|
static |
Exponentiates to a power of 2.
Definition at line 3013 of file integer.cpp.
| size_t Integer::MinEncodedSize | ( | Signedness | sign = UNSIGNED | ) | const |
The minimum number of bytes to encode this integer.
| sign | enumeration indicating Signedness |
Definition at line 3359 of file integer.cpp.
| void Integer::Encode | ( | byte * | output, |
| size_t | outputLen, | ||
| Signedness | sign = UNSIGNED |
||
| ) | const |
Encode in big-endian format.
| output | big-endian byte array |
| outputLen | length of the byte array |
| sign | enumeration indicating Signedness Unsigned means encode absolute value, signed means encode two's complement if negative. outputLen can be used to ensure an Integer is encoded to an exact size (rather than a minimum size). An exact size is useful, for example, when encoding to a field element size. |
Definition at line 3374 of file integer.cpp.
| void Integer::Encode | ( | BufferedTransformation & | bt, |
| size_t | outputLen, | ||
| Signedness | sign = UNSIGNED |
||
| ) | const |
Encode in big-endian format.
| bt | BufferedTransformation object |
| outputLen | length of the encoding |
| sign | enumeration indicating Signedness Unsigned means encode absolute value, signed means encode two's complement if negative. outputLen can be used to ensure an Integer is encoded to an exact size (rather than a minimum size). An exact size is useful, for example, when encoding to a field element size. |
Definition at line 3381 of file integer.cpp.
|
virtual |
Encode in DER format.
| bt | BufferedTransformation object Encodes the Integer using Distinguished Encoding Rules The result is placed into a BufferedTransformation object |
Implements ASN1Object.
Definition at line 3396 of file integer.cpp.
| void Integer::DEREncodeAsOctetString | ( | BufferedTransformation & | bt, |
| size_t | length | ||
| ) | const |
encode absolute value as big-endian octet string
| bt | BufferedTransformation object |
| length | the number of mytes to decode |
Definition at line 3418 of file integer.cpp.
| size_t Integer::OpenPGPEncode | ( | byte * | output, |
| size_t | bufferSize | ||
| ) | const |
Encode absolute value in OpenPGP format.
| output | big-endian byte array |
| bufferSize | length of the byte array |
Definition at line 3434 of file integer.cpp.
| size_t Integer::OpenPGPEncode | ( | BufferedTransformation & | bt | ) | const |
Encode absolute value in OpenPGP format.
| bt | BufferedTransformation object |
Definition at line 3440 of file integer.cpp.
| void Integer::Decode | ( | const byte * | input, |
| size_t | inputLen, | ||
| Signedness | sign = UNSIGNED |
||
| ) |
Decode from big-endian byte array.
| input | big-endian byte array |
| inputLen | length of the byte array |
| sign | enumeration indicating Signedness |
Definition at line 3319 of file integer.cpp.
| void Integer::Decode | ( | BufferedTransformation & | bt, |
| size_t | inputLen, | ||
| Signedness | sign = UNSIGNED |
||
| ) |
Decode nonnegative value from big-endian byte array.
| bt | BufferedTransformation object |
| inputLen | length of the byte array |
| sign | enumeration indicating Signedness |
bt.MaxRetrievable() >= inputLen. Definition at line 3325 of file integer.cpp.
| void Integer::BERDecode | ( | const byte * | input, |
| size_t | inputLen | ||
| ) |
Decode from BER format.
| input | big-endian byte array |
| inputLen | length of the byte array |
Definition at line 3403 of file integer.cpp.
|
virtual |
Decode from BER format.
| bt | BufferedTransformation object |
Implements ASN1Object.
Definition at line 3409 of file integer.cpp.
| void Integer::BERDecodeAsOctetString | ( | BufferedTransformation & | bt, |
| size_t | length | ||
| ) |
Decode nonnegative value from big-endian octet string.
| bt | BufferedTransformation object |
| length | length of the byte array |
Definition at line 3425 of file integer.cpp.
| void Integer::OpenPGPDecode | ( | const byte * | input, |
| size_t | inputLen | ||
| ) |
Decode from OpenPGP format.
| input | big-endian byte array |
| inputLen | length of the byte array |
Definition at line 3449 of file integer.cpp.
| void Integer::OpenPGPDecode | ( | BufferedTransformation & | bt | ) |
Decode from OpenPGP format.
| bt | BufferedTransformation object |
Definition at line 3455 of file integer.cpp.
| bool Integer::IsConvertableToLong | ( | ) | const |
Determines if the Integer is convertable to Long.
Definition at line 2937 of file integer.cpp.
| signed long Integer::ConvertToLong | ( | ) | const |
Convert the Integer to Long.
Definition at line 2951 of file integer.cpp.
| unsigned int Integer::BitCount | ( | ) | const |
Determines the number of bits required to represent the Integer.
Definition at line 3310 of file integer.cpp.
| unsigned int Integer::ByteCount | ( | ) | const |
Determines the number of bytes required to represent the Integer.
Definition at line 3301 of file integer.cpp.
| unsigned int Integer::WordCount | ( | ) | const |
Determines the number of words required to represent the Integer.
Definition at line 3296 of file integer.cpp.
| bool Integer::GetBit | ( | size_t | i | ) | const |
Provides the i-th bit of the Integer.
Definition at line 3070 of file integer.cpp.
| byte Integer::GetByte | ( | size_t | i | ) | const |
Provides the i-th byte of the Integer.
Definition at line 3094 of file integer.cpp.
| lword Integer::GetBits | ( | size_t | i, |
| size_t | n | ||
| ) | const |
Provides the low order bits of the Integer.
Definition at line 3111 of file integer.cpp.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| void Integer::Randomize | ( | RandomNumberGenerator & | rng, |
| size_t | bitCount | ||
| ) |
Set this Integer to random integer.
| rng | RandomNumberGenerator used to generate material |
| bitCount | the number of bits in the resulting integer The random integer created is uniformly distributed over [0, 2bitCount]. |
Definition at line 3463 of file integer.cpp.
| void Integer::Randomize | ( | RandomNumberGenerator & | rng, |
| const Integer & | min, | ||
| const Integer & | max | ||
| ) |
Set this Integer to random integer.
| rng | RandomNumberGenerator used to generate material |
| min | the minimum value |
| max | the maximum value The random integer created is uniformly distributed over [min, max]. |
Definition at line 3473 of file integer.cpp.
| bool Integer::Randomize | ( | RandomNumberGenerator & | rng, |
| const Integer & | min, | ||
| const Integer & | max, | ||
| RandomNumberType | rnType, | ||
| const Integer & | equiv = Zero(), |
||
| const Integer & | mod = One() |
||
| ) |
Set this Integer to random integer of special form.
| rng | RandomNumberGenerator used to generate material |
| min | the minimum value |
| max | the maximum value |
| rnType | RandomNumberType to specify the type |
| equiv | the equivalence class based on the parameter mod |
| mod | the modulus used to reduce the equivalence class |
| RandomNumberNotFound | if the set is empty. Ideally, the random integer created should be uniformly distributed over {x | min <= x <= max and x is of rnType and x % mod == equiv}. However the actual distribution may not be uniform because sequential search is used to find an appropriate number from a random starting point. May return (with very small probability) a pseudoprime when a prime is requested and max > lastSmallPrime*lastSmallPrime. lastSmallPrime is declared in nbtheory.h. |
Definition at line 3490 of file integer.cpp.
| void Integer::SetBit | ( | size_t | n, |
| bool | value = 1 |
||
| ) |
| void Integer::SetByte | ( | size_t | n, |
| byte | value | ||
| ) |
| int Integer::Compare | ( | const Integer & | a | ) | const |
Perform signed comparison.
| a | the Integer to comapre |
| -1 | if *this < a |
| 0 | if *this = a |
| 1 | if *this > a |
Definition at line 4171 of file integer.cpp.
Definition at line 3955 of file integer.cpp.
Definition at line 4066 of file integer.cpp.
| word Integer::Modulo | ( | word | b | ) | const |
Definition at line 4115 of file integer.cpp.
|
inline |
calculate multiplicative inverse of *this mod n
Definition at line 4239 of file integer.cpp.
| word Integer::InverseMod | ( | word | n | ) | const |
Definition at line 4264 of file integer.cpp.
|
friend |
Extraction operator.
| in | a reference to a std::istream |
| a | a reference to an Integer |
Definition at line 3609 of file integer.cpp.
|
friend |
Insertion operator.
| out | a reference to a std::ostream |
| a | a constant reference to an Integer |
Definition at line 3634 of file integer.cpp.