class BigInteger (View source)

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

static protected $base
static protected $baseFull
static protected $maxDigit
static protected $msb
static protected $max10 $max10 in greatest $max10Len satisfying $max10 = 10$max10Len <= 2$base.
static protected $max10Len $max10Len in greatest $max10Len satisfying $max10 = 10$max10Len <= 2$base.
static protected $maxDigit2
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

__construct(int|string|resource $x = 0, 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. base-256).

string
toHex(bool $twos_compliment = false)

Converts a BigInteger to a hex string (eg. base-16)).

string
toBits(bool $twos_compliment = false)

Converts a BigInteger to a bit string (eg. base-2).

string
toString()

Converts a BigInteger to a base-10 number.

copy()

Copy an object

__toString()

__toString() magic method

__clone()

__clone() magic method

__sleep()

__sleep() magic method

__wakeup()

__wakeup() magic method

__debugInfo()

__debugInfo() magic method

add(BigInteger $y)

Adds two BigIntegers.

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

Performs addition.

subtract(BigInteger $y)

Subtracts two BigIntegers.

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

Performs subtraction.

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

modPow(BigInteger $e, BigInteger $n)

Performs modular exponentiation.

powMod(BigInteger $e, BigInteger $n)

Performs modular exponentiation.

_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

_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. 67108864)

BigInteger|false
modInverse(BigInteger $n)

Calculates modular inverses.

extendedGCD(BigInteger $n)

Calculates the greatest common divisor and Bezout's identity.

gcd(BigInteger $n)

Calculates the greatest common divisor

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

bitwise_xor(BigInteger $x)

Logical Exclusive-Or

bitwise_not()

Logical Not

bitwise_rightShift(int $shift)

Logical Right Shift

bitwise_leftShift(int $shift)

Logical Left Shift

bitwise_leftRotate(int $shift)

Logical Left Rotate

bitwise_rightRotate(int $shift)

Logical Right Rotate

_random_number_helper(int $size)

Generates a random 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

_normalize(BigInteger $result)

Normalize

_trim(array $value)

Trim

array
_array_repeat(array $input, mixed $multiplier)

Array Repeat

string
_base256_lshift(string $x, int $shift)

Logical Left Shift

string
_base256_rshift(string $x, int $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

BigInteger __construct(int|string|resource $x = 0, 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: toString(); // outputs 50 ?>

Parameters

int|string|resource $x base-10 number or base-$base number if $base set.
int $base

Return Value

BigInteger

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: toBytes(); // outputs chr(65) ?>

Parameters

bool $twos_compliment

Return Value

string

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: toHex(); // outputs '41' ?>

Parameters

bool $twos_compliment

Return Value

string

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: toBits(); // outputs '1000001' ?>

Parameters

bool $twos_compliment

Return Value

string

string toString()

Converts a BigInteger to a base-10 number.

Here's an example: toString(); // outputs 50 ?>

Return Value

string

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()

__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().

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()

__sleep()

__sleep() magic method

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

See also

\self::__wakeup()

__wakeup()

__wakeup() magic method

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

See also

\self::__sleep()

__debugInfo()

__debugInfo() magic method

Will be called, automatically, when print_r() or var_dump() are called

BigInteger add(BigInteger $y)

Adds two BigIntegers.

Here's an example: add($b); echo $c->toString(); // outputs 30 ?>

Parameters

BigInteger $y

Return Value

BigInteger

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

BigInteger subtract(BigInteger $y)

Subtracts two BigIntegers.

Here's an example: subtract($b); echo $c->toString(); // outputs -10 ?>

Parameters

BigInteger $y

Return Value

BigInteger

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

BigInteger multiply(BigInteger $x)

Multiplies two BigIntegers

Here's an example: multiply($b); echo $c->toString(); // outputs 200 ?>

Parameters

BigInteger $x

Return Value

BigInteger

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

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

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

array _square(array $x = false)

Performs squaring

Parameters

array $x

Return Value

array

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

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

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: divide($b); echo $quotient->toString(); // outputs 0 echo "\r\n"; echo $remainder->toString(); // outputs 10 ?>

Parameters

BigInteger $y

Return Value

array

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

BigInteger modPow(BigInteger $e, BigInteger $n)

Performs modular exponentiation.

Here's an example: modPow($b, $c); echo $c->toString(); // outputs 10 ?>

Parameters

BigInteger $e
BigInteger $n

Return Value

BigInteger

BigInteger powMod(BigInteger $e, BigInteger $n)

Performs modular exponentiation.

Alias for modPow().

Parameters

BigInteger $e
BigInteger $n

Return Value

BigInteger

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

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()

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()

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()

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

Modular square

Parameters

array $x
array $n
int $mode

Return Value

array

See also

\self::_slidingWindow()

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()

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()

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()

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()

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()

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()

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()

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()

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: 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

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: 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

BigInteger gcd(BigInteger $n)

Calculates the greatest common divisor

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

Here's an example: extendedGCD($b); echo $gcd->toString() . "\r\n"; // outputs 21 ?>

Parameters

BigInteger $n

Return Value

BigInteger

BigInteger abs()

Absolute value.

Return Value

BigInteger

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 that is < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.

See also

\self::equals()

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()

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()

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

BigInteger bitwise_and(BigInteger $x)

Logical And

Parameters

BigInteger $x

Return Value

BigInteger

BigInteger bitwise_or(BigInteger $x)

Logical Or

Parameters

BigInteger $x

Return Value

BigInteger

BigInteger bitwise_xor(BigInteger $x)

Logical Exclusive-Or

Parameters

BigInteger $x

Return Value

BigInteger

BigInteger bitwise_not()

Logical Not

Return Value

BigInteger

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

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

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

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

BigInteger _random_number_helper(int $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

int $size

Return Value

BigInteger

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

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

_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()

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

_lshift(int $shift)

Logical Left Shift

Shifts BigInteger's by $shift bits.

Parameters

int $shift

_rshift(int $shift)

Logical Right Shift

Shifts BigInteger's by $shift bits.

Parameters

int $shift

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()

BigInteger _trim(array $value)

Trim

Removes leading zeros

Parameters

array $value

Return Value

BigInteger

array _array_repeat(array $input, mixed $multiplier)

Array Repeat

Parameters

array $input
mixed $multiplier

Return Value

array

string _base256_lshift(string $x, int $shift)

Logical Left Shift

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

Parameters

string $x (by reference)
int $shift

Return Value

string

string _base256_rshift(string $x, int $shift)

Logical Right Shift

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

Parameters

string $x (by referenc)
int $shift

Return Value

string

string _int2bytes(int $x)

Converts 32-bit integers to bytes.

Parameters

int $x

Return Value

string

int _bytes2int(string $x)

Converts bytes to 32-bit integers

Parameters

string $x

Return Value

int

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()

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