Multiple precision integer with arithmetic operations. More...
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... | |
Public Member Functions | |
| virtual void | BEREncode (BufferedTransformation &bt) const |
| Encode this object into a BufferedTransformation. | |
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. | |
| Integer (Sign sign, word highWord, word lowWord) | |
| Convert from two words. | |
| Integer (const char *str) | |
| Convert from a C-string. | |
| Integer (const wchar_t *str) | |
| Convert from a wide C-string. | |
| Integer (const byte *encodedInteger, size_t byteCount, Signedness sign=UNSIGNED) | |
| Convert from a big-endian byte array. | |
| Integer (BufferedTransformation &bt, size_t byteCount, Signedness sign=UNSIGNED) | |
| Convert from a big-endian array. | |
| Integer (BufferedTransformation &bt) | |
| Convert from a BER encoded byte array. | |
| Integer (RandomNumberGenerator &rng, size_t bitCount) | |
| Create a random 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. | |
| static const Integer & | Zero () |
| Integer representing 0. | |
| static const Integer & | One () |
| Integer representing 1. | |
| static const Integer & | Two () |
| Integer representing 2. | |
| static Integer | Power2 (size_t e) |
| Exponentiates to a power of 2. | |
ENCODE/DECODE | |
|
| |
| size_t | MinEncodedSize (Signedness sign=UNSIGNED) const |
| The minimum number of bytes to encode this integer. | |
| void | Encode (byte *output, size_t outputLen, Signedness sign=UNSIGNED) const |
| Encode in big-endian format. | |
| void | Encode (BufferedTransformation &bt, size_t outputLen, Signedness sign=UNSIGNED) const |
| Encode in big-endian format. | |
| void | DEREncode (BufferedTransformation &bt) const |
| Encode in DER format. | |
| void | DEREncodeAsOctetString (BufferedTransformation &bt, size_t length) const |
| encode absolute value as big-endian octet string | |
| size_t | OpenPGPEncode (byte *output, size_t bufferSize) const |
| Encode absolute value in OpenPGP format. | |
| size_t | OpenPGPEncode (BufferedTransformation &bt) const |
| Encode absolute value in OpenPGP format. | |
| void | Decode (const byte *input, size_t inputLen, Signedness sign=UNSIGNED) |
| Decode from big-endian byte array. | |
| void | Decode (BufferedTransformation &bt, size_t inputLen, Signedness sign=UNSIGNED) |
| Decode nonnegative value from big-endian byte array. | |
| void | BERDecode (const byte *input, size_t inputLen) |
| Decode from BER format. | |
| void | BERDecode (BufferedTransformation &bt) |
| Decode from BER format. | |
| void | BERDecodeAsOctetString (BufferedTransformation &bt, size_t length) |
| Decode nonnegative value from big-endian octet string. | |
| void | OpenPGPDecode (const byte *input, size_t inputLen) |
| Decode from OpenPGP format. | |
| void | OpenPGPDecode (BufferedTransformation &bt) |
| Decode from OpenPGP format. | |
ACCESSORS | |
|
| |
| bool | IsConvertableToLong () const |
| return true if *this can be represented as a signed long | |
| signed long | ConvertToLong () const |
| return equivalent signed long if possible, otherwise undefined | |
| unsigned int | BitCount () const |
| number of significant bits = floor(log2(abs(*this))) + 1 | |
| unsigned int | ByteCount () const |
| number of significant bytes = ceiling(BitCount()/8) | |
| unsigned int | WordCount () const |
| number of significant words = ceiling(ByteCount()/sizeof(word)) | |
| bool | GetBit (size_t i) const |
| return the i-th bit, i=0 being the least significant bit | |
| byte | GetByte (size_t i) const |
| return the i-th byte | |
| lword | GetBits (size_t i, size_t n) const |
| return n lowest bits of *this >> i | |
| bool | IsZero () const |
| bool | NotZero () const |
| bool | IsNegative () const |
| bool | NotNegative () const |
| bool | IsPositive () const |
| bool | NotPositive () const |
| bool | IsEven () const |
| bool | IsOdd () const |
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. | |
| void | Randomize (RandomNumberGenerator &rng, const Integer &min, const Integer &max) |
| Set this Integer to random integer. | |
| 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. | |
| 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. | |
| void | SetByte (size_t n, byte value) |
| Set the n-th byte to value. | |
| 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. | |
| 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 | |
| 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. | |
| std::ostream & | operator<< (std::ostream &out, const Integer &a) |
| Insertion operator. | |
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 i used to hold the representation. The second is a Sign, and its is used to track the sign of the Integer.
Definition at line 31 of file integer.h.
| 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.
| enum Integer::Signedness |
| Integer::Integer | ( | Sign | sign, | |
| lword | value | |||
| ) |
Convert from lword.
| sign | enumeration indicating Sign | |
| value | the long word |
Definition at line 2833 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 2854 of file integer.cpp.
| Integer::Integer | ( | const char * | str | ) | [explicit] |
Convert from a C-string.
| str | C-string value |
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.
Definition at line 3092 of file integer.cpp.
| Integer::Integer | ( | const wchar_t * | str | ) | [explicit] |
Convert from a wide C-string.
| str | wide C-string value |
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.
Definition at line 3098 of file integer.cpp.
| Integer::Integer | ( | const byte * | encodedInteger, | |
| size_t | byteCount, | |||
| Signedness | sign = UNSIGNED | |||
| ) |
Convert from a big-endian byte array.
| encodedInteger | big-endian byte array | |
| byteCount | length of the byte array | |
| sign | enumeration indicating Signedness |
Definition at line 2889 of file integer.cpp.
References Decode().
| Integer::Integer | ( | BufferedTransformation & | bt, | |
| size_t | byteCount, | |||
| Signedness | sign = UNSIGNED | |||
| ) |
Convert from a big-endian array.
| bt | BufferedTransformation object with big-endian byte array | |
| byteCount | length of the byte array | |
| sign | enumeration indicating Signedness |
Definition at line 2884 of file integer.cpp.
References Decode().
| Integer::Integer | ( | BufferedTransformation & | bt | ) | [explicit] |
Convert from a BER encoded byte array.
| bt | BufferedTransformation object with BER encoded byte array |
Definition at line 2894 of file integer.cpp.
References BERDecode().
| 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 2899 of file integer.cpp.
References Randomize().
| 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 2904 of file integer.cpp.
References Randomize().
| const Integer & Integer::Zero | ( | ) | [static] |
Integer representing 0.
Zero() avoids calling constructors for frequently used integers
Definition at line 2926 of file integer.cpp.
Referenced by RWFunction::ApplyFunction(), DL_GroupParameters_EC< EC >::AssignFrom(), InvertibleESIGNFunction::CalculateRandomizedInverse(), TF_DecryptorBase::Decrypt(), XTR_DH::GeneratePrivateKey(), TF_VerifierBase::InputSignature(), InverseMod(), MultiplicativeInverse(), and SquareRoot().
| const Integer & Integer::One | ( | ) | [static] |
Integer representing 1.
One() avoids calling constructors for frequently used integers
Definition at line 2931 of file integer.cpp.
Referenced by DL_EncryptorBase< SCHEME_OPTIONS::Element >::Encrypt(), FirstPrime(), MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateEphemeralPrivateKey(), DL_SimpleKeyAgreementDomainBase< GROUP_PARAMETERS::Element >::GeneratePrivateKey(), DL_PrivateKeyImpl< DL_GroupParameters_EC< EC > >::GenerateRandom(), MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateStaticPrivateKey(), InverseMod(), XTR_DH::Validate(), InvertibleRWFunction::Validate(), RWFunction::Validate(), InvertibleRSAFunction::Validate(), RSAFunction::Validate(), InvertibleRabinFunction::Validate(), RabinFunction::Validate(), DL_PrivateKeyImpl< DL_GroupParameters_EC< EC > >::Validate(), InvertibleLUCFunction::Validate(), LUCFunction::Validate(), InvertibleESIGNFunction::Validate(), and ESIGNFunction::Validate().
| const Integer & Integer::Two | ( | ) | [static] |
Integer representing 2.
Two() avoids calling constructors for frequently used integers
Definition at line 2936 of file integer.cpp.
| Integer Integer::Power2 | ( | size_t | e | ) | [static] |
Exponentiates to a power of 2.
Definition at line 2910 of file integer.cpp.
References BitsToWords(), and SetBit().
Referenced by MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::Agree(), DivideByPowerOf2(), Encode(), InvertibleESIGNFunction::GenerateRandom(), ESIGNFunction::ImageBound(), MaurerProvablePrime(), MihailescuProvablePrime(), MinEncodedSize(), and SquareRoot().
| size_t Integer::MinEncodedSize | ( | Signedness | sign = UNSIGNED |
) | const |
The minimum number of bytes to encode this integer.
| sign | enumeration indicating Signedness |
Definition at line 3167 of file integer.cpp.
References ByteCount(), GetByte(), Power2(), STDMAX(), and UNSIGNED.
Referenced by DEREncode().
| 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 3179 of file integer.cpp.
Referenced by TF_DecryptorBase::Decrypt(), DEREncode(), DEREncodeAsOctetString(), DSAConvertSignatureFormat(), Encode(), XTR_DH::GeneratePrivateKey(), DL_SimpleKeyAgreementDomainBase< GROUP_PARAMETERS::Element >::GeneratePrivateKey(), MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateStaticPrivateKey(), TF_VerifierBase::InputSignature(), OpenPGPEncode(), and DL_VerifierBase< SCHEME_OPTIONS::Element >::RecoverAndRestart().
| 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 3186 of file integer.cpp.
References ByteCount(), Encode(), GetByte(), Power2(), BufferedTransformation::Put(), STDMAX(), and UNSIGNED.
| void Integer::DEREncode | ( | BufferedTransformation & | bt | ) | const [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 3201 of file integer.cpp.
References Encode(), MinEncodedSize(), and SIGNED.
Referenced by XTR_DH::DEREncode(), DL_GroupParameters_IntegerBased::DEREncode(), InvertibleESIGNFunction::DEREncode(), ESIGNFunction::DEREncode(), InvertibleRSAFunction::DEREncodePrivateKey(), RSAFunction::DEREncodePublicKey(), and DSAConvertSignatureFormat().
| 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 3223 of file integer.cpp.
References Encode().
Referenced by DL_PrivateKey_EC< EC >::DEREncodePrivateKey().
| 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 |
OpenPGPEncode places result into a BufferedTransformation object and returns the number of bytes used for the encoding
Definition at line 3239 of file integer.cpp.
Referenced by DSAConvertSignatureFormat().
| size_t Integer::OpenPGPEncode | ( | BufferedTransformation & | bt | ) | const |
Encode absolute value in OpenPGP format.
| bt | BufferedTransformation object |
OpenPGPEncode places result into a BufferedTransformation object and returns the number of bytes used for the encoding
Definition at line 3245 of file integer.cpp.
References BitCount(), BitsToBytes(), Encode(), and BufferedTransformation::PutWord16().
| 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 3127 of file integer.cpp.
Referenced by BERDecode(), BERDecodeAsOctetString(), DL_PrivateKey_EC< EC >::BERDecodePrivateKey(), DSAConvertSignatureFormat(), DL_VerifierBase< SCHEME_OPTIONS::Element >::InputSignature(), Integer(), OpenPGPDecode(), and Randomize().
| 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 3133 of file integer.cpp.
References BytesToWords(), SecBlock< T, A >::CleanNew(), BufferedTransformation::Get(), BufferedTransformation::MaxRetrievable(), NEGATIVE, BufferedTransformation::Peek(), POSITIVE, SIGNED, SecBlock< T, A >::size(), SecBlock< T, A >::SizeInBytes(), and BufferedTransformation::Skip().
| 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 3208 of file integer.cpp.
Referenced by DL_GroupParameters_IntegerBased::BERDecode(), InvertibleESIGNFunction::BERDecode(), ESIGNFunction::BERDecode(), InvertibleRSAFunction::BERDecodePrivateKey(), DL_PrivateKeyImpl< DL_GroupParameters_EC< EC > >::BERDecodePrivateKey(), RSAFunction::BERDecodePublicKey(), DSAConvertSignatureFormat(), and Integer().
| void Integer::BERDecode | ( | BufferedTransformation & | bt | ) | [virtual] |
Decode from BER format.
| bt | BufferedTransformation object |
Implements ASN1Object.
Definition at line 3214 of file integer.cpp.
References Decode(), BufferedTransformation::MaxRetrievable(), and SIGNED.
| 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 3230 of file integer.cpp.
References Decode().
| 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 3254 of file integer.cpp.
Referenced by DSAConvertSignatureFormat().
| void Integer::OpenPGPDecode | ( | BufferedTransformation & | bt | ) |
Decode from OpenPGP format.
| bt | BufferedTransformation object |
Definition at line 3260 of file integer.cpp.
References BitsToBytes(), Decode(), BufferedTransformation::GetWord16(), and BufferedTransformation::MaxRetrievable().
| Integer& Integer::operator%= | ( | word | t | ) | [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 3268 of file integer.cpp.
References Crop(), Decode(), RandomNumberGenerator::GenerateBlock(), and UNSIGNED.
Referenced by InvertibleESIGNFunction::CalculateRandomizedInverse(), Integer(), MaurerProvablePrime(), MihailescuProvablePrime(), and Randomize().
| 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 3278 of file integer.cpp.
References BitCount(), and Randomize().
| 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 3295 of file integer.cpp.
References MakeParameters().
| void Integer::SetBit | ( | size_t | n, | |
| bool | value = 1 | |||
| ) |
Set the n-th bit to value.
0-based numbering.
Definition at line 2966 of file integer.cpp.
References BitsToWords(), SecBlock< T, A >::CleanGrow(), and SecBlock< T, A >::size().
Referenced by Power2().
| void Integer::SetByte | ( | size_t | n, | |
| byte | value | |||
| ) |
Set the n-th byte to value.
0-based numbering.
Definition at line 2988 of file integer.cpp.
References BytesToWords(), and SecBlock< T, A >::CleanGrow().
| 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 3961 of file integer.cpp.
Definition at line 3747 of file integer.cpp.
Definition at line 3858 of file integer.cpp.
References Divide().
Referenced by InverseMod().
| word Integer::Modulo | ( | word | b | ) | const |
Definition at line 3909 of file integer.cpp.
References WordCount().
| Integer Integer::Squared | ( | ) | const [inline] |
Definition at line 452 of file integer.h.
Referenced by RWFunction::ApplyFunction(), RabinFunction::ApplyFunction(), IsSquare(), and XTR_DH::Validate().
calculate multiplicative inverse of *this mod n
Definition at line 4029 of file integer.cpp.
References InverseMod(), Modulo(), One(), SecBlock< T, A >::size(), and Zero().
Referenced by InvertibleRWFunction::GenerateRandom(), InvertibleRSAFunction::GenerateRandom(), InvertibleRabinFunction::GenerateRandom(), InvertibleLUCFunction::GenerateRandom(), InvertibleRSAFunction::Initialize(), and InverseMod().
| word Integer::InverseMod | ( | word | n | ) | const |
Definition at line 4054 of file integer.cpp.
| virtual void ASN1Object::BEREncode | ( | BufferedTransformation & | bt | ) | const [inline, virtual, inherited] |
Encode this object into a BufferedTransformation.
| bt | BufferedTransformation object |
Uses Basic Encoding Rules (BER).
This may be useful if DEREncode() would be too inefficient.
Definition at line 2649 of file cryptlib.h.
| std::istream& operator>> | ( | std::istream & | in, | |
| Integer & | a | |||
| ) | [friend] |
Extraction operator.
| in | a reference to a std::istream | |
| a | a reference to an Integer |
| std::ostream& operator<< | ( | std::ostream & | out, | |
| const Integer & | a | |||
| ) | [friend] |
Insertion operator.
| out | a reference to a std::ostream | |
| a | a constant reference to an Integer |
The output integer responds to std::hex, std::oct, std::hex, std::upper and std::lower. The output includes the suffix h (for hex), . (dot, for dec) and o (for octal). There is currently no way to supress the suffix.
If you want to print an Integer without the suffix or using an arbitrary base, then use IntToString<Integer>().
1.6.1