Montgomery
class Montgomery extends Base (View source)
Curves over y^2 = x^3 + a*x + x
Properties
protected object[] | $doubles | Doubles | from Base |
protected BigInteger | $order | The Order | |
protected PrimeField | $factory | Prime Field Integer factory | |
protected object | $a | Cofficient for x | |
protected object | $a24 | Constant used for point doubling | |
protected object | $zero | The Number Zero | |
protected object | $one | The Number One | |
protected object | $p | Base Point | |
protected BigInteger | $modulo | The modulo |
Methods
Returns the affine point
Converts an affine point to an XZ coordinate
Set x and y coordinates for the base point
Retrieve the base point as an array
Details
in
Base at line 63
object
randomInteger()
Returns a random integer
in
Base at line 73
object
convertInteger(BigInteger $x)
Converts a BigInteger to a FiniteField integer
in
Base at line 83
int
getLengthInBytes()
Returns the length, in bytes, of the modulo
in
Base at line 93
int
getLength()
Returns the length, in bits, of the modulo
array
multiplyPoint(array $p, Integer $d)
Multiply a point on the curve by a scalar
Uses the montgomery ladder technique as described here:
https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Montgomery_ladder https://github.com/phpecc/phpecc/issues/16#issuecomment-59176772
in
Base at line 130
FiniteField
createRandomMultiplier()
Creates a random scalar multiplier
in
Base at line 144
setOrder(BigInteger $order)
Sets the Order
in
Base at line 154
BigInteger
getOrder()
Returns the Order
in
Base at line 164
object
setReduction(callable $func)
Use a custom defined modular reduction function
object[]
convertToAffine(array $p)
Returns the affine point
object[]
convertToInternal(array $p)
Converts an affine point to an XZ coordinate
From https://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html
XZ coordinates represent x y as X Z satsfying the following equations:
x=X/Z
in
Base at line 194
object[]
negatePoint(array $p)
Negates a point
in
Base at line 211
int[]
multiplyAddPoints(array $points, array $scalars)
Multiply and Add Points
setModulo(BigInteger $modulo)
Sets the modulo
setCoefficients(BigInteger $a)
Set coefficients a
PrimeInteger[]
setBasePoint(BigInteger|PrimeInteger $x, BigInteger|PrimeInteger $y)
Set x and y coordinates for the base point
array
getBasePoint()
Retrieve the base point as an array