phpseclib API Documentation
Class

phpseclib\Math\BigInteger

class BigInteger

Pure-PHP arbitrary precision integer arithmetic library.

Supports base-2, base-10, base-16, and base-256 numbers.

Constants

MONTGOMERY

BARRETT

POWEROF2

CLASSIC

NONE

VALUE

$result[self::VALUE] contains the value.

SIGN

$result[self::SIGN] contains the sign.

VARIABLE

Cache constants

$cache[self::VARIABLE] tells us whether or not the cached data is still valid.

DATA

$cache[self::DATA] contains the cached data.

MODE_INTERNAL

To use the pure-PHP implementation

MODE_BCMATH

To use the BCMath library

(if enabled; otherwise, the internal implementation will be used)

MODE_GMP

To use the GMP library

(if present; otherwise, either the BCMath or the internal implementation will be used)

KARATSUBA_CUTOFF

Karatsuba Cutoff

At what point do we switch between Karatsuba multiplication and schoolbook long multiplication?

Properties

array $value Holds the BigInteger's value.
bool $is_negative Holds the BigInteger's magnitude.
$precision Precision
$bitmask Precision Bitmask
string $hex Mode independent value used for serialization.

Methods

BigInteger __construct($x $x, int $base = 10)

Converts base-2, base-10, base-16, and binary strings (base-256) to BigIntegers.

string toBytes(bool $twos_compliment = false)

Converts a BigInteger to a byte string (eg.

string toHex(bool $twos_compliment = false)

Converts a BigInteger to a hex string (eg.

string toBits(bool $twos_compliment = false)

Converts a BigInteger to a bit string (eg.

string toString()

Converts a BigInteger to a base-10 number.

BigInteger copy()

Copy an object

__toString()

__toString() magic method

BigInteger __clone()

__clone() magic method

__sleep()

__sleep() magic method

__wakeup()

__wakeup() magic method

__debugInfo()

__debugInfo() magic method

BigInteger add(BigInteger $y)

Adds two BigIntegers.

array _add(array $x_value, bool $x_negative, array $y_value, bool $y_negative)

Performs addition.

BigInteger subtract(BigInteger $y)

Subtracts two BigIntegers.

array _subtract(array $x_value, bool $x_negative, array $y_value, bool $y_negative)

Performs subtraction.

BigInteger multiply(BigInteger $x)

Multiplies two BigIntegers

array _multiply(array $x_value, bool $x_negative, array $y_value, bool $y_negative)

Performs multiplication.

array _regularMultiply(array $x_value, array $y_value)

Performs long multiplication on two BigIntegers

array _karatsuba(array $x_value, array $y_value)

Performs Karatsuba multiplication on two BigIntegers

array _square(array $x = false)

Performs squaring

array _baseSquare(array $value)

Performs traditional squaring on two BigIntegers

array _karatsubaSquare(array $value)

Performs Karatsuba "squaring" on two BigIntegers

array divide(BigInteger $y)

Divides two BigIntegers.

array _divide_digit(array $dividend, array $divisor)

Divides a BigInteger by a regular integer

BigInteger modPow(BigInteger $e, BigInteger $n)

Performs modular exponentiation.

BigInteger powMod(BigInteger $e, BigInteger $n)

Performs modular exponentiation.

BigInteger _slidingWindow(BigInteger $e, BigInteger $n, int $mode)

Sliding Window k-ary Modular Exponentiation

array _reduce(array $x, array $n, int $mode)

Modular reduction

array _prepareReduce(array $x, array $n, int $mode)

Modular reduction preperation

array _multiplyReduce(array $x, array $y, array $n, int $mode)

Modular multiply

array _squareReduce(array $x, array $n, int $mode)

Modular square

BigInteger _mod2(BigInteger $n)

Modulos for Powers of Two

array _barrett(array $n, array $m)

Barrett Modular Reduction

array _regularBarrett(array $x, array $n)

(Regular) Barrett Modular Reduction

array _multiplyLower(array $x_value, bool $x_negative, array $y_value, bool $y_negative, int $stop)

Performs long multiplication up to $stop digits

array _montgomery(array $x, array $n)

Montgomery Modular Reduction

array _montgomeryMultiply(array $x, array $y, array $m)

Montgomery Multiply

array _prepMontgomery(array $x, array $n)

Prepare a number for use in Montgomery Modular Reductions

int _modInverse67108864(array $x)

Modular Inverse of a number mod 2**26 (eg.

BigInteger|false modInverse(BigInteger $n)

Calculates modular inverses.

BigInteger extendedGCD(BigInteger $n)

Calculates the greatest common divisor and Bezout's identity.

BigInteger gcd(BigInteger $n)

Calculates the greatest common divisor

BigInteger abs()

Absolute value.

int compare(BigInteger $y)

Compares two numbers.

int _compare(array $x_value, bool $x_negative, array $y_value, bool $y_negative)

Compares two numbers.

bool equals(BigInteger $x)

Tests the equality of two numbers.

setPrecision(int $bits)

Set Precision

BigInteger bitwise_and(BigInteger $x)

Logical And

BigInteger bitwise_or(BigInteger $x)

Logical Or

BigInteger bitwise_xor(BigInteger $x)

Logical Exclusive-Or

BigInteger bitwise_not()

Logical Not

BigInteger bitwise_rightShift(int $shift)

Logical Right Shift

BigInteger bitwise_leftShift(int $shift)

Logical Left Shift

BigInteger bitwise_leftRotate(int $shift)

Logical Left Rotate

BigInteger bitwise_rightRotate(int $shift)

Logical Right Rotate

BigInteger _random_number_helper($size)

Generates a random BigInteger

BigInteger random(BigInteger $arg1, BigInteger $arg2 = false)

Generate a random number

Math_BigInteger|false randomPrime(BigInteger $arg1, BigInteger $arg2 = false, int $timeout = false)

Generate a random prime number.

_make_odd()

Make the current number odd

bool isPrime(BigInteger $t = false)

Checks a numer to see if it's prime

_lshift(int $shift)

Logical Left Shift

_rshift(int $shift)

Logical Right Shift

BigInteger _normalize(BigInteger $result)

Normalize

BigInteger _trim(array $value)

Trim

array _array_repeat($input $input, $multiplier $multiplier)

Array Repeat

string _base256_lshift($x $x, $shift $shift)

Logical Left Shift

string _base256_rshift($x $x, $shift $shift)

Logical Right Shift

string _int2bytes(int $x)

Converts 32-bit integers to bytes.

int _bytes2int(string $x)

Converts bytes to 32-bit integers

string _encodeASN1Length(int $length)

DER-encode an integer

int _safe_divide(int $x, int $y)

Single digit division

Details

at line 251
public BigInteger __construct($x $x, int $base = 10)

Converts base-2, base-10, base-16, and binary strings (base-256) to BigIntegers.

If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using two's compliment. The sole exception to this is -10, which is treated the same as 10 is.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('0x32', 16); // 50 in base-16

echo $a->toString(); // outputs 50 ?>

Parameters

$x $x base-10 number or base-$base number if $base set.
int $base

Return Value

BigInteger

at line 533
public string toBytes(bool $twos_compliment = false)

Converts a BigInteger to a byte string (eg.

base-256).

Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're saved as two's compliment.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('65');

echo $a->toBytes(); // outputs chr(65) ?>

Parameters

bool $twos_compliment

Return Value

string

at line 632
public string toHex(bool $twos_compliment = false)

Converts a BigInteger to a hex string (eg.

base-16)).

Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're saved as two's compliment.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('65');

echo $a->toHex(); // outputs '41' ?>

Parameters

bool $twos_compliment

Return Value

string

at line 657
public string toBits(bool $twos_compliment = false)

Converts a BigInteger to a bit string (eg.

base-2).

Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're saved as two's compliment.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('65');

echo $a->toBits(); // outputs '1000001' ?>

Parameters

bool $twos_compliment

Return Value

string

at line 692
public string toString()

Converts a BigInteger to a base-10 number.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('50');

echo $a->toString(); // outputs 50 ?>

Return Value

string

at line 744
public BigInteger copy()

Copy an object

PHP5 passes objects by reference while PHP4 passes by value. As such, we need a function to guarantee that all objects are passed by value, when appropriate. More information can be found here:

{@link http://php.net/language.oop5.basic#51624}

Return Value

BigInteger

See also

self::__clone()

at line 763
public __toString()

__toString() magic method

Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call toString().

at line 780
public BigInteger __clone()

__clone() magic method

Although you can call BigInteger::toString() directly in PHP5, you cannot call BigInteger::clone() directly in PHP5. You can in PHP4 since it's not a magic method, but in PHP5, you have to call it by using the PHP5 only syntax of $y = clone $x. As such, if you're trying to write an application that works on both PHP4 and PHP5, call BigInteger::copy(), instead.

Return Value

BigInteger

See also

self::copy()

at line 793
public __sleep()

__sleep() magic method

Will be called, automatically, when serialize() is called on a BigInteger object.

See also

self::__wakeup()

at line 811
public __wakeup()

__wakeup() magic method

Will be called, automatically, when unserialize() is called on a BigInteger object.

See also

self::__sleep()

at line 829
public __debugInfo()

__debugInfo() magic method

Will be called, automatically, when printr() or vardump() are called

at line 875
public BigInteger add(BigInteger $y)

Adds two BigIntegers.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('10'); $b = new \phpseclib\Math\BigInteger('20');

$c = $a->add($b);

echo $c->toString(); // outputs 30 ?>

Parameters

BigInteger $y

Return Value

BigInteger

at line 909
public array _add(array $x_value, bool $x_negative, array $y_value, bool $y_negative)

Performs addition.

Parameters

array $x_value
bool $x_negative
array $y_value
bool $y_negative

Return Value

array

at line 1004
public BigInteger subtract(BigInteger $y)

Subtracts two BigIntegers.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('10'); $b = new \phpseclib\Math\BigInteger('20');

$c = $a->subtract($b);

echo $c->toString(); // outputs -10 ?>

Parameters

BigInteger $y

Return Value

BigInteger

at line 1038
public array _subtract(array $x_value, bool $x_negative, array $y_value, bool $y_negative)

Performs subtraction.

Parameters

array $x_value
bool $x_negative
array $y_value
bool $y_negative

Return Value

array

at line 1137
public BigInteger multiply(BigInteger $x)

Multiplies two BigIntegers

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('10'); $b = new \phpseclib\Math\BigInteger('20');

$c = $a->multiply($b);

echo $c->toString(); // outputs 200 ?>

Parameters

BigInteger $x

Return Value

BigInteger

at line 1171
public array _multiply(array $x_value, bool $x_negative, array $y_value, bool $y_negative)

Performs multiplication.

Parameters

array $x_value
bool $x_negative
array $y_value
bool $y_negative

Return Value

array

at line 1208
public array _regularMultiply(array $x_value, array $y_value)

Performs long multiplication on two BigIntegers

Modeled after 'multiply' in MutableBigInteger.java.

Parameters

array $x_value
array $y_value

Return Value

array

at line 1272
public array _karatsuba(array $x_value, array $y_value)

Performs Karatsuba multiplication on two BigIntegers

See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}.

Parameters

array $x_value
array $y_value

Return Value

array

at line 1310
public array _square(array $x = false)

Performs squaring

Parameters

array $x

Return Value

array

at line 1328
public array _baseSquare(array $value)

Performs traditional squaring on two BigIntegers

Squaring can be done faster than multiplying a number by itself can be. See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} / {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information.

Parameters

array $value

Return Value

array

at line 1367
public array _karatsubaSquare(array $value)

Performs Karatsuba "squaring" on two BigIntegers

See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}.

Parameters

array $value

Return Value

array

at line 1422
public array divide(BigInteger $y)

Divides two BigIntegers.

Returns an array whose first element contains the quotient and whose second element contains the "common residue". If the remainder would be positive, the "common residue" and the remainder are the same. If the remainder would be negative, the "common residue" is equal to the sum of the remainder and the divisor (basically, the "common residue" is the first positive modulo).

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('10'); $b = new \phpseclib\Math\BigInteger('20');

list($quotient, $remainder) = $a->divide($b);

echo $quotient->toString(); // outputs 0 echo "\r\n"; echo $remainder->toString(); // outputs 10 ?>

Parameters

BigInteger $y

Return Value

array

at line 1605
public array _divide_digit(array $dividend, array $divisor)

Divides a BigInteger by a regular integer

abc / x = a00 / x + b0 / x + c / x

Parameters

array $dividend
array $divisor

Return Value

array

at line 1659
public BigInteger modPow(BigInteger $e, BigInteger $n)

Performs modular exponentiation.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger('10'); $b = new \phpseclib\Math\BigInteger('20'); $c = new \phpseclib\Math\BigInteger('30');

$c = $a->modPow($b, $c);

echo $c->toString(); // outputs 10 ?>

Parameters

BigInteger $e
BigInteger $n

Return Value

BigInteger

at line 1810
public BigInteger powMod(BigInteger $e, BigInteger $n)

Performs modular exponentiation.

Alias for modPow().

Parameters

BigInteger $e
BigInteger $n

Return Value

BigInteger

at line 1829
public BigInteger _slidingWindow(BigInteger $e, BigInteger $n, int $mode)

Sliding Window k-ary Modular Exponentiation

Based on {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=27 HAC 14.85} / {@link http://math.libtomcrypt.com/files/tommath.pdf#page=210 MPM 7.7}. In a departure from those algorithims, however, this function performs a modular reduction after every multiplication and squaring operation. As such, this function has the same preconditions that the reductions being used do.

Parameters

BigInteger $e
BigInteger $n
int $mode

Return Value

BigInteger

at line 1906
public array _reduce(array $x, array $n, int $mode)

Modular reduction

For most $modes this will return the remainder.

Parameters

array $x
array $n
int $mode

Return Value

array

See also

self::_slidingWindow()

at line 1943
public array _prepareReduce(array $x, array $n, int $mode)

Modular reduction preperation

Parameters

array $x
array $n
int $mode

Return Value

array

See also

self::_slidingWindow()

at line 1962
public array _multiplyReduce(array $x, array $y, array $n, int $mode)

Modular multiply

Parameters

array $x
array $y
array $n
int $mode

Return Value

array

See also

self::_slidingWindow()

at line 1981
public array _squareReduce(array $x, array $n, int $mode)

Modular square

Parameters

array $x
array $n
int $mode

Return Value

array

See also

self::_slidingWindow()

at line 2000
public BigInteger _mod2(BigInteger $n)

Modulos for Powers of Two

Calculates $x%$n, where $n = 2**$e, for some $e. Since this is basically the same as doing $x & ($n-1), we'll just use this function as a wrapper for doing that.

Parameters

BigInteger $n

Return Value

BigInteger

See also

self::_slidingWindow()

at line 2031
public array _barrett(array $n, array $m)

Barrett Modular Reduction

See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} / {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information. Modified slightly, so as not to require negative numbers (initially, this script didn't support negative numbers).

Employs "folding", as described at {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}. To quote from it, "the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x."

Unfortunately, the "Barrett Reduction with Folding" algorithm described in thesis-149.pdf is not, as written, all that usable on account of (1) its not using reasonable radix points as discussed in {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable radix points, it only works when there are an even number of digits in the denominator. The reason for (2) is that (x >> 1) + (x >> 1) != x / 2 + x / 2. If x is even, they're the same, but if x is odd, they're not. See the in-line comments for details.

Parameters

array $n
array $m

Return Value

array

See also

self::_slidingWindow()

at line 2128
public array _regularBarrett(array $x, array $n)

(Regular) Barrett Modular Reduction

For numbers with more than four digits BigInteger::_barrett() is faster. The difference between that and this is that this function does not fold the denominator into a smaller form.

Parameters

array $x
array $n

Return Value

array

See also

self::_slidingWindow()

at line 2202
public array _multiplyLower(array $x_value, bool $x_negative, array $y_value, bool $y_negative, int $stop)

Performs long multiplication up to $stop digits

If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved.

Parameters

array $x_value
bool $x_negative
array $y_value
bool $y_negative
int $stop

Return Value

array

See also

self::_regularBarrett()

at line 2281
public array _montgomery(array $x, array $n)

Montgomery Modular Reduction

($x->prepMontgomery($n))->montgomery($n) yields $x % $n. {@link http://math.libtomcrypt.com/files/tommath.pdf#page=170 MPM 6.3} provides insights on how this can be improved upon (basically, by using the comba method). gcd($n, 2) must be equal to one for this function to work correctly.

Parameters

array $x
array $n

Return Value

array

See also

self::_prepMontgomery()
self::_slidingWindow()

at line 2329
public array _montgomeryMultiply(array $x, array $y, array $m)

Montgomery Multiply

Interleaves the montgomery reduction and long multiplication algorithms together as described in {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36}

Parameters

array $x
array $y
array $m

Return Value

array

See also

self::_prepMontgomery()
self::_montgomery()

at line 2380
public array _prepMontgomery(array $x, array $n)

Prepare a number for use in Montgomery Modular Reductions

Parameters

array $x
array $n

Return Value

array

See also

self::_montgomery()
self::_slidingWindow()

at line 2417
public int _modInverse67108864(array $x)

Modular Inverse of a number mod 2**26 (eg.

67108864)

Based off of the bnpInvDigit function implemented and justified in the following URL:

{@link http://www-cs-students.stanford.edu/~tjw/jsbn/jsbn.js}

The following URL provides more info:

{@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85}

As for why we do all the bitmasking... strange things can happen when converting from floats to ints. For instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields int(-2147483648). To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't auto-converted to floats. The outermost bitmask is present because without it, there's no guarantee that the "residue" returned would be the so-called "common residue". We use fmod, in the last step, because the maximum possible $x is 26 bits and the maximum $result is 16 bits. Thus, we have to be able to handle up to 40 bits, which only 64-bit floating points will support.

Thanks to Pedro Gimeno Fortea for input!

Parameters

array $x

Return Value

int

See also

self::_montgomery()

at line 2455
public BigInteger|false modInverse(BigInteger $n)

Calculates modular inverses.

Say you have (30 mod 17 * x mod 17) mod 17 == 1. x can be found using modular inverses.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger(30); $b = new \phpseclib\Math\BigInteger(17);

$c = $a->modInverse($b); echo $c->toString(); // outputs 4

echo "\r\n";

$d = $a->multiply($c); list(, $d) = $d->divide($b); echo $d; // outputs 1 (as per the definition of modular inverse) ?>

Parameters

BigInteger $n

Return Value

BigInteger|false

at line 2519
public BigInteger extendedGCD(BigInteger $n)

Calculates the greatest common divisor and Bezout's identity.

Say you have 693 and 609. The GCD is 21. Bezout's identity states that there exist integers x and y such that 693x + 609y == 21. In point of fact, there are actually an infinite number of x and y combinations and which combination is returned is dependent upon which mode is in use. See {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bezout's identity - Wikipedia} for more information.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger(693); $b = new \phpseclib\Math\BigInteger(609);

extract($a->extendedGCD($b));

echo $gcd->toString() . "\r\n"; // outputs 21 echo $a->toString() * $x->toString() + $b->toString() * $y->toString(); // outputs 21 ?>

Parameters

BigInteger $n

Return Value

BigInteger

at line 2648
public BigInteger gcd(BigInteger $n)

Calculates the greatest common divisor

Say you have 693 and 609. The GCD is 21.

Here's an example: <?php $a = new \phpseclib\Math\BigInteger(693); $b = new \phpseclib\Math\BigInteger(609);

$gcd = a->extendedGCD($b);

echo $gcd->toString() . "\r\n"; // outputs 21 ?>

Parameters

BigInteger $n

Return Value

BigInteger

at line 2660
public BigInteger abs()

Absolute value.

Return Value

BigInteger

at line 2696
public int compare(BigInteger $y)

Compares two numbers.

Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite. The reason for this is demonstrated thusly:

$x > $y: $x->compare($y) > 0 $x < $y: $x->compare($y) < 0 $x == $y: $x->compare($y) == 0

Note how the same comparison operator is used. If you want to test for equality, use $x->equals($y).

Parameters

BigInteger $y

Return Value

int < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.

See also

self::equals()

at line 2726
public int _compare(array $x_value, bool $x_negative, array $y_value, bool $y_negative)

Compares two numbers.

Parameters

array $x_value
bool $x_negative
array $y_value
bool $y_negative

Return Value

int

See also

self::compare()

at line 2761
public bool equals(BigInteger $x)

Tests the equality of two numbers.

If you need to see if one number is greater than or less than another number, use BigInteger::compare()

Parameters

BigInteger $x

Return Value

bool

See also

self::compare()

at line 2780
public setPrecision(int $bits)

Set Precision

Some bitwise operations give different results depending on the precision being used. Examples include left shift, not, and rotates.

Parameters

int $bits

at line 2801
public BigInteger bitwise_and(BigInteger $x)

Logical And

Parameters

BigInteger $x

Return Value

BigInteger

at line 2842
public BigInteger bitwise_or(BigInteger $x)

Logical Or

Parameters

BigInteger $x

Return Value

BigInteger

at line 2882
public BigInteger bitwise_xor(BigInteger $x)

Logical Exclusive-Or

Parameters

BigInteger $x

Return Value

BigInteger

at line 2921
public BigInteger bitwise_not()

Logical Not

Return Value

BigInteger

at line 2963
public BigInteger bitwise_rightShift(int $shift)

Logical Right Shift

Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.

Parameters

int $shift

Return Value

BigInteger

at line 3001
public BigInteger bitwise_leftShift(int $shift)

Logical Left Shift

Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.

Parameters

int $shift

Return Value

BigInteger

at line 3038
public BigInteger bitwise_leftRotate(int $shift)

Logical Left Rotate

Instead of the top x bits being dropped they're appended to the shifted bit string.

Parameters

int $shift

Return Value

BigInteger

at line 3083
public BigInteger bitwise_rightRotate(int $shift)

Logical Right Rotate

Instead of the bottom x bits being dropped they're prepended to the shifted bit string.

Parameters

int $shift

Return Value

BigInteger

at line 3097
public BigInteger _random_number_helper($size)

Generates a random BigInteger

Byte length is equal to $length. Uses \phpseclib\Crypt\Random if it's loaded and mt_rand if it's not.

Parameters

$size

Return Value

BigInteger

at line 3134
public BigInteger random(BigInteger $arg1, BigInteger $arg2 = false)

Generate a random number

Returns a random number between $min and $max where $min and $max can be defined using one of the two methods:

$min->random($max) $max->random($min)

Parameters

BigInteger $arg1
BigInteger $arg2

Return Value

BigInteger

at line 3215
public Math_BigInteger|false randomPrime(BigInteger $arg1, BigInteger $arg2 = false, int $timeout = false)

Generate a random prime number.

If there's not a prime within the given range, false will be returned. If more than $timeout seconds have elapsed, give up and return false.

Parameters

BigInteger $arg1
BigInteger $arg2
int $timeout

Return Value

Math_BigInteger|false

at line 3315
public _make_odd()

Make the current number odd

If the current number is odd it'll be unchanged. If it's even, one will be added to it.

See also

self::randomPrime()

at line 3345
public bool isPrime(BigInteger $t = false)

Checks a numer to see if it's prime

Assuming the $t parameter is not set, this function has an error rate of 2**-80. The main motivation for the $t parameter is distributability. BigInteger::randomPrime() can be distributed across multiple pageloads on a website instead of just one.

Parameters

BigInteger $t

Return Value

bool

at line 3494
public _lshift(int $shift)

Logical Left Shift

Shifts BigInteger's by $shift bits.

Parameters

int $shift

at line 3529
public _rshift(int $shift)

Logical Right Shift

Shifts BigInteger's by $shift bits.

Parameters

int $shift

at line 3565
public BigInteger _normalize(BigInteger $result)

Normalize

Removes leading zeros and truncates (if necessary) to maintain the appropriate precision

Parameters

BigInteger $result

Return Value

BigInteger

See also

self::_trim()

at line 3622
public BigInteger _trim(array $value)

Trim

Removes leading zeros

Parameters

array $value

Return Value

BigInteger

at line 3642
public array _array_repeat($input $input, $multiplier $multiplier)

Array Repeat

Parameters

$input $input Array
$multiplier $multiplier mixed

Return Value

array

at line 3657
public string _base256_lshift($x $x, $shift $shift)

Logical Left Shift

Shifts binary strings $shift bits, essentially multiplying by 2**$shift.

Parameters

$x $x String
$shift $shift Integer

Return Value

string

at line 3686
public string _base256_rshift($x $x, $shift $shift)

Logical Right Shift

Shifts binary strings $shift bits, essentially dividing by 2**$shift and returning the remainder.

Parameters

$x $x String
$shift $shift Integer

Return Value

string

at line 3727
public string _int2bytes(int $x)

Converts 32-bit integers to bytes.

Parameters

int $x

Return Value

string

at line 3739
public int _bytes2int(string $x)

Converts bytes to 32-bit integers

Parameters

string $x

Return Value

int

at line 3755
public string _encodeASN1Length(int $length)

DER-encode an integer

The ability to DER-encode integers is needed to create RSA public keys for use with OpenSSL

Parameters

int $length

Return Value

string

See also

self::modPow()

at line 3778
public int _safe_divide(int $x, int $y)

Single digit division

Even if int64 is being used the division operator will return a float64 value if the dividend is not evenly divisible by the divisor. Since a float64 doesn't have the precision of int64 this is a problem so, when int64 is being used, we'll guarantee that the dividend is divisible by first subtracting the remainder.

Parameters

int $x
int $y

Return Value

int