nistk409
class nistk409 extends sect409k1 (View source)
Properties
protected object[] | $doubles | Doubles | from Base |
protected BigInteger | $order | The Order | from Binary |
protected BinaryField | $factory | Binary Field Integer factory | from Binary |
protected object | $a | Cofficient for x^1 | from Binary |
protected object | $b | Cofficient for x^0 | from Binary |
protected object | $p | Base Point | from Binary |
protected object | $one | The number one over the specified finite field | from Binary |
protected BigInteger | $modulo | The modulo | from Binary |
Methods
Set x and y coordinates for the base point
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
in
Binary at line 92
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