Binary
class Binary extends Base (View source)
Curves over y^2 + xy = x^3 + ax^2 + b
Properties
protected object[] | $doubles | Doubles | from Base |
protected BigInteger | $order | The Order | |
protected BinaryField | $factory | Binary Field Integer factory | |
protected object | $a | Cofficient for x^1 | |
protected object | $b | Cofficient for x^0 | |
protected object | $p | Base Point | |
protected object | $one | The number one over the specified finite field | |
protected BigInteger | $modulo | The modulo |
Methods
Returns the affine point
Converts an affine point to a jacobian coordinate
Sets the modulo
Set coefficients a and b
Set x and y coordinates for the base point
Retrieve the base point as an array
Adds two points on the curve
Doubles a point on a curve
Returns the X coordinate and the derived Y coordinate
Tests whether or not the x / y values satisfy the equation
Returns the modulo
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
in
Base at line 108
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
A Jacobian Coordinate is of the form (x, y, z). To convert a Jacobian Coordinate to an Affine Point you do (x / z^2, y / z^3)
object[]
convertToInternal(array $p)
Converts an affine point to a jacobian coordinate
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(...$modulo)
Sets the modulo
setCoefficients(string $a, string $b)
Set coefficients a and b
setBasePoint(string|BinaryInteger $x, string|BinaryInteger $y)
Set x and y coordinates for the base point
array
getBasePoint()
Retrieve the base point as an array
FiniteField[]
addPoint(array $p, array $q)
Adds two points on the curve
FiniteField[]
doublePoint(array $p)
Doubles a point on a curve
array
derivePoint($m)
Returns the X coordinate and the derived Y coordinate
Not supported because it is covered by patents. Quoting https://www.openssl.org/docs/man1.1.0/apps/ecparam.html ,
"Due to patent issues the compressed option is disabled by default for binary curves and can be enabled by defining the preprocessor macro OPENSSL_EC_BIN_PT_COMP at compile time."
bool
verifyPoint(array $p)
Tests whether or not the x / y values satisfy the equation
BigInteger
getModulo()
Returns the modulo
Integer
getA()
Returns the a coefficient
Integer
getB()
Returns the a coefficient