This is EllipticCurves.info, produced by Macaulay2, version 1.22

EllipticCurves -- elliptic curves and a brute-force method for point counting
*****************************************************************************

Authors
=======

  * Alessandro Oneto <oneto@math.su.se>
  * Stefano Marseglia <stefanom@math.su.se>

Version
=======

This documentation describes version 0.1 of EllipticCurves.

Source code
===========

The source code from which this documentation is derived is in the file
EllipticCurves.m2 (see common/share/Macaulay2/EllipticCurves.m2 ).

Exports
=======

  * Types
      * EllipticCurve -- The class of elliptic curves in
        short Weierstrass form.
      * EllipticCurveW -- The class of elliptic curves
        in Weierstrass form.
      * EllPoint -- The class of points of elliptic curves in
        short Weierstrass form.
      * EllPointW -- The class of points of elliptic curves
        in Weierstrass form.
  * Functions and commands
      * bruteForceGroupOrder -- A brute-force
        method to count the points on an elliptic curve in characteristic
        different from 2.
      * bruteForceRationalPoints -- A
        brute-force method to list the points on an elliptic curve.
      * Discriminant -- A method to compute the
        discriminant of an elliptic curve.
      * ellCurve -- A method for creating elliptic curves.
      * ellCurveFromjInv -- A method to define an
        elliptic curve from a given j-invariant.
      * ellPoint -- A method for defining point on an elliptic
        curve.
      * isElliptic -- A method to check if an ideal defines
        an elliptic curve.
      * isOnEllCurve -- A method to check if a point is on
        an elliptic curve.
      * jInvariant -- A method to compute the j-invariant of
        an elliptic curve.
      * toShortWForm -- A method to transform an elliptic
        curve from Weierstrass form to short Weierstrass form.
      * toWeierstrass -- A method to transform a smooth
        plane cubic into Weierstrass form.
  * Methods
      * - EllPoint
      * "- EllPointW" -- see - EllPoint,
      * bruteForceGroupOrder(EllipticCurve)
        -- A brute-force method to
        count the points on an elliptic curve in characteristic different from
        2.
      * bruteForceGroupOrder(EllipticCurveW)
        -- A brute-force method to
        count the points on an elliptic curve in characteristic different from
        2.
      * bruteForceRationalPoints(EllipticCurve)
        -- A brute-force method to
        list the points on an elliptic curve.
      * bruteForceRationalPoints(EllipticCurveW)
        -- A brute-force method
        to list the points on an elliptic curve.
      * Discriminant(EllipticCurve), --
        A method to compute the discriminant of an elliptic curve.
      * Discriminant(EllipticCurveW),
        -- A method to compute the discriminant of an elliptic curve.
      * ellCurve(List,Thing) -- A method for
        creating elliptic curves in Weierstrass form.
      * ellCurve(Thing,Thing,Thing),
        -- A method for creating elliptic curves in short Weierstrass form.
      * "ellCurveFromjInv(Thing)" -- see ellCurveFromjInv,
        -- A method to define an elliptic curve from a given
        j-invariant.
      * EllipticCurve == EllipticCurve
      * "EllipticCurveW == EllipticCurveW" -- see EllipticCurve == EllipticCurve,
      * EllPoint + EllPoint
      * "EllPointW + EllPointW" -- see EllPoint + EllPoint,
      * EllPoint - EllPoint
      * "EllPointW - EllPointW" -- see EllPoint - EllPoint,
      * EllPoint == EllPoint
      * "EllPointW == EllPointW" -- see EllPoint == EllPoint,
      * ellPoint(List,EllipticCurve),
        -- A method for defining point on an elliptic curve.
      * ellPoint(List,EllipticCurveW)
        -- A method for defining point on
        an elliptic curve.
      * "isElliptic(Ideal)" -- see isElliptic, -- A method to
        check if an ideal defines an elliptic curve.
      * isOnEllCurve(List,EllipticCurve)
        -- A method to check if a point
        is on an elliptic curve.
      * isOnEllCurve(List,EllipticCurveW)
        -- A method to check if a
        point is on an elliptic curve.
      * jInvariant(EllipticCurve) -- A
        method to compute the j-invariant of an elliptic curve.
      * jInvariant(EllipticCurveW) -- A
        method to compute the j-invariant of an elliptic curve.
      * "expression(EllipticCurve)" -- see net(EllipticCurve),
      * "expression(EllipticCurveW)" -- see net(EllipticCurve),
      * net(EllipticCurve)
      * "net(EllipticCurveW)" -- see net(EllipticCurve),
      * "expression(EllPoint)" -- see net(EllPoint),
      * "expression(EllPointW)" -- see net(EllPoint),
      * net(EllPoint)
      * "net(EllPointW)" -- see net(EllPoint),
      * "toShortWForm(EllipticCurveW)" -- see toShortWForm,
        -- A method to transform an elliptic curve from Weierstrass form to
        short Weierstrass form.
      * "toWeierstrass(List,List,Thing)" -- see toWeierstrass,
        -- A method to transform a smooth plane cubic into
        Weierstrass form.
      * "EllPoint * ZZ" -- see ZZ * EllPoint,
      * "EllPointW * ZZ" -- see ZZ * EllPoint,
      * ZZ * EllPoint
      * "ZZ * EllPointW" -- see ZZ * EllPoint,

For the programmer
==================

The object EllipticCurves, is a package (Macaulay2Doc).

- EllPoint
**********

Synopsis
========

  * Operator: - (Macaulay2Doc),
  * Usage:
        -P
  * Inputs:
      * P, an instance of the type EllPoint,
  * Outputs:
      * an instance of the type EllPoint,

Description
===========

Computes the inverse of a point.

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                                  |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))        |
|                                                                             |
|o1 : EllipticCurve                                                           |
+-----------------------------------------------------------------------------+
|i2 : P=ellPoint({1,5,1},E)                                                   |
|                                                                             |
|o2 = Point ({1, 5, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +   |
|                                                                             |
|o2 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+
|i3 : -P                                                                      |
|                                                                             |
|o3 = Point ({1, -5, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +  |
|                                                                             |
|o3 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * - EllPoint
  * "- EllPointW"

bruteForceGroupOrder -- A brute-force method to count the points on an elliptic curve in characteristic different from 2.
*************************************************************************************************************************

Ways to use bruteForceGroupOrder :
==================================

  * bruteForceGroupOrder(EllipticCurve)
    -- A brute-force method to count
    the points on an elliptic curve in characteristic different from 2.
  * bruteForceGroupOrder(EllipticCurveW)
    -- A brute-force method to count
    the points on an elliptic curve in characteristic different from 2.

For the programmer
==================

The object bruteForceGroupOrder, is a method function (Macaulay2Doc).

bruteForceGroupOrder(EllipticCurve) -- A brute-force method to count the points on an elliptic curve in characteristic different from 2.
****************************************************************************************************************************************

Synopsis
========

  * Function: bruteForceGroupOrder,
  * Usage:
        bruteForceGroupOrder(E)
  * Inputs:
      * E, an instance of the type EllipticCurve,

Description
===========

+---------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                          |
|                                                                     |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))|
|                                                                     |
|o1 : EllipticCurve                                                   |
+---------------------------------------------------------------------+
|i2 : bruteForceGroupOrder(E)                                         |
|                                                                     |
|o2 = 9                                                               |
+---------------------------------------------------------------------+

Ways to use this method:
========================

  * bruteForceGroupOrder(EllipticCurve)
    -- A brute-force method to count
    the points on an elliptic curve in characteristic different from 2.

bruteForceGroupOrder(EllipticCurveW) -- A brute-force method to count the points on an elliptic curve in characteristic different from 2.
*****************************************************************************************************************************************

Synopsis
========

  * Function: bruteForceGroupOrder,
  * Usage:
        bruteForceGroupOrder(E)
  * Inputs:
      * E, an instance of the type EllipticCurveW,

Description
===========

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve({1,2,3,4,6},GF(29))                                          |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(     |
|                                                                             |
|o1 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|over(GF 29 .))                                                               |
+-----------------------------------------------------------------------------+
|i2 : bruteForceGroupOrder(E)                                                 |
|                                                                             |
|o2 = 30                                                                      |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * bruteForceGroupOrder(EllipticCurveW)
    -- A brute-force method to count
    the points on an elliptic curve in characteristic different from 2.

bruteForceRationalPoints -- A brute-force method to list the points on an elliptic curve.
*****************************************************************************************

Ways to use bruteForceRationalPoints :
======================================

  * bruteForceRationalPoints(EllipticCurve)
    -- A brute-force method to
    list the points on an elliptic curve.
  * bruteForceRationalPoints(EllipticCurveW)
    -- A brute-force method to
    list the points on an elliptic curve.

For the programmer
==================

The object bruteForceRationalPoints, is a
method function (Macaulay2Doc).

bruteForceRationalPoints(EllipticCurve) -- A brute-force method to list the points on an elliptic curve.
********************************************************************************************************

Synopsis
========

  * Function: bruteForceRationalPoints,
  * Usage:
        bruteForceRationalPoints(E)
  * Inputs:
      * E, an instance of the type EllipticCurve,

Description
===========

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                                  |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))        |
|                                                                             |
|o1 : EllipticCurve                                                           |
+-----------------------------------------------------------------------------+
|i2 : bruteForceRationalPoints(E)                                             |
|                                                                             |
|o2 = {Point ({0, 1, 0}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +  |
|     ------------------------------------------------------------------------|
|     (-5)( over(GF 13 .))))), Point ({1, -5, 1}( on the (Elliptic Curve      |
|     ------------------------------------------------------------------------|
|     defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))))), Point ({1, 5, 1}( |
|     ------------------------------------------------------------------------|
|     on the (Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13    |
|     ------------------------------------------------------------------------|
|     .))))), Point ({2, 3, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + |
|     ------------------------------------------------------------------------|
|     3 X + (-5)( over(GF 13 .))))), Point ({2, -3, 1}( on the (Elliptic Curve|
|     ------------------------------------------------------------------------|
|     defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))))), Point ({-1, 2, 1}(|
|     ------------------------------------------------------------------------|
|     on the (Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13    |
|     ------------------------------------------------------------------------|
|     .))))), Point ({-1, -2, 1}( on the (Elliptic Curve defined by Y^2 = X^3 |
|     ------------------------------------------------------------------------|
|     + 3 X + (-5)( over(GF 13 .))))), Point ({-4, 6, 1}( on the (Elliptic    |
|     ------------------------------------------------------------------------|
|     Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))))), Point ({-4, |
|     ------------------------------------------------------------------------|
|     -6, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)(       |
|     ------------------------------------------------------------------------|
|     over(GF 13 .)))))}                                                      |
|                                                                             |
|o2 : List                                                                    |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * bruteForceRationalPoints(EllipticCurve)
    -- A brute-force method to
    list the points on an elliptic curve.

bruteForceRationalPoints(EllipticCurveW) -- A brute-force method to list the points on an elliptic curve.
*********************************************************************************************************

Synopsis
========

  * Function: bruteForceRationalPoints,
  * Usage:
        bruteForceRationalPoints(E)
  * Inputs:
      * E, an instance of the type EllipticCurveW,

Description
===========

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve({1,2,3,4,6},GF(29))                                          |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(     |
|                                                                             |
|o1 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|over(GF 29 .))                                                               |
+-----------------------------------------------------------------------------+
|i2 : bruteForceRationalPoints(E)                                             |
|                                                                             |
|o2 = {Point ({0, 1, 0}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = |
|     ------------------------------------------------------------------------|
|     X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({2, 12, 1}( on the     |
|     ------------------------------------------------------------------------|
|     (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(    |
|     ------------------------------------------------------------------------|
|     over(GF 29 .))))), Point ({4, -12, 1}( on the (Elliptic Curve defined by|
|     ------------------------------------------------------------------------|
|     Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({4, |
|     ------------------------------------------------------------------------|
|     5, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 |
|     ------------------------------------------------------------------------|
|     + 4 X + 6( over(GF 29 .))))), Point ({8, -2, 1}( on the (Elliptic Curve |
|     ------------------------------------------------------------------------|
|     defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), |
|     ------------------------------------------------------------------------|
|     Point ({8, -9, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = |
|     ------------------------------------------------------------------------|
|     X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({-13, -13, 1}( on the  |
|     ------------------------------------------------------------------------|
|     (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(    |
|     ------------------------------------------------------------------------|
|     over(GF 29 .))))), Point ({-13, -6, 1}( on the (Elliptic Curve defined  |
|     ------------------------------------------------------------------------|
|     by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point   |
|     ------------------------------------------------------------------------|
|     ({-5, -11, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 |
|     ------------------------------------------------------------------------|
|     + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({-5, 13, 1}( on the        |
|     ------------------------------------------------------------------------|
|     (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(    |
|     ------------------------------------------------------------------------|
|     over(GF 29 .))))), Point ({-11, -3, 1}( on the (Elliptic Curve defined  |
|     ------------------------------------------------------------------------|
|     by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point   |
|     ------------------------------------------------------------------------|
|     ({-11, 11, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 |
|     ------------------------------------------------------------------------|
|     + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({7, 1, 1}( on the (Elliptic|
|     ------------------------------------------------------------------------|
|     Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29   |
|     ------------------------------------------------------------------------|
|     .))))), Point ({7, -11, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY|
|     ------------------------------------------------------------------------|
|     + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({-1, 1, 1}( on |
|     ------------------------------------------------------------------------|
|     the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(|
|     ------------------------------------------------------------------------|
|     over(GF 29 .))))), Point ({-1, -3, 1}( on the (Elliptic Curve defined by|
|     ------------------------------------------------------------------------|
|     Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({-2,|
|     ------------------------------------------------------------------------|
|     7, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 |
|     ------------------------------------------------------------------------|
|     + 4 X + 6( over(GF 29 .))))), Point ({-2, -8, 1}( on the (Elliptic Curve|
|     ------------------------------------------------------------------------|
|     defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), |
|     ------------------------------------------------------------------------|
|     Point ({-4, 12, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y =|
|     ------------------------------------------------------------------------|
|     X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({-4, -11, 1}( on the   |
|     ------------------------------------------------------------------------|
|     (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(    |
|     ------------------------------------------------------------------------|
|     over(GF 29 .))))), Point ({-8, 1, 1}( on the (Elliptic Curve defined by |
|     ------------------------------------------------------------------------|
|     Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({-8,|
|     ------------------------------------------------------------------------|
|     4, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 |
|     ------------------------------------------------------------------------|
|     + 4 X + 6( over(GF 29 .))))), Point ({-6, 10, 1}( on the (Elliptic Curve|
|     ------------------------------------------------------------------------|
|     defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), |
|     ------------------------------------------------------------------------|
|     Point ({-6, -7, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y =|
|     ------------------------------------------------------------------------|
|     X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({10, -10, 1}( on the   |
|     ------------------------------------------------------------------------|
|     (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(    |
|     ------------------------------------------------------------------------|
|     over(GF 29 .))))), Point ({10, -3, 1}( on the (Elliptic Curve defined by|
|     ------------------------------------------------------------------------|
|     Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point      |
|     ------------------------------------------------------------------------|
|     ({-14, 8, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 +|
|     ------------------------------------------------------------------------|
|     2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({-14, 3, 1}( on the (Elliptic|
|     ------------------------------------------------------------------------|
|     Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29   |
|     ------------------------------------------------------------------------|
|     .))))), Point ({0, 12, 1}( on the (Elliptic Curve defined by Y^2 + 1 XY |
|     ------------------------------------------------------------------------|
|     + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))))), Point ({0, 14, 1}( on |
|     ------------------------------------------------------------------------|
|     the (Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(|
|     ------------------------------------------------------------------------|
|     over(GF 29 .)))))}                                                      |
|                                                                             |
|o2 : List                                                                    |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * bruteForceRationalPoints(EllipticCurveW)
    -- A brute-force method to
    list the points on an elliptic curve.

Discriminant -- A method to compute the discriminant of an elliptic curve.
**************************************************************************

Ways to use Discriminant :
==========================

  * Discriminant(EllipticCurve) -- A
    method to compute the discriminant of an elliptic curve.
  * Discriminant(EllipticCurveW) -- A
    method to compute the discriminant of an elliptic curve.

For the programmer
==================

The object Discriminant, is a method function (Macaulay2Doc).

Discriminant(EllipticCurve) -- A method to compute the discriminant of an elliptic curve.
*****************************************************************************************

Synopsis
========

  * Function: Discriminant,
  * Usage:
        Discriminant(E)
  * Inputs:
      * E, an instance of the type EllipticCurve,

Description
===========

+---------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                          |
|                                                                     |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))|
|                                                                     |
|o1 : EllipticCurve                                                   |
+---------------------------------------------------------------------+
|i2 : Discriminant(E)                                                 |
|                                                                     |
|o2 = 4                                                               |
|                                                                     |
|o2 : GF 13                                                           |
+---------------------------------------------------------------------+

Ways to use this method:
========================

  * Discriminant(EllipticCurve) -- A
    method to compute the discriminant of an elliptic curve.

Discriminant(EllipticCurveW) -- A method to compute the discriminant of an elliptic curve.
******************************************************************************************

Synopsis
========

  * Function: Discriminant,
  * Usage:
        Discriminant(E)
  * Inputs:
      * E, an instance of the type EllipticCurveW,

Description
===========

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve({1,2,3,4,6},GF(29))                                          |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(     |
|                                                                             |
|o1 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|over(GF 29 .))                                                               |
+-----------------------------------------------------------------------------+
|i2 : Discriminant(E)                                                         |
|                                                                             |
|o2 = -2                                                                      |
|                                                                             |
|o2 : GF 29                                                                   |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * Discriminant(EllipticCurveW) -- A
    method to compute the discriminant of an elliptic curve.

ellCurve -- A method for creating elliptic curves.
**************************************************

Ways to use ellCurve :
======================

  * ellCurve(List,Thing) -- A method for
    creating elliptic curves in Weierstrass form.
  * ellCurve(Thing,Thing,Thing), --
    A method for creating elliptic curves in short Weierstrass form.

For the programmer
==================

The object ellCurve, is a method function (Macaulay2Doc).

ellCurve(List,Thing) -- A method for creating elliptic curves in Weierstrass form.
**********************************************************************************

Synopsis
========

  * Function: ellCurve,
  * Usage:
        ellCurve(L,K)
  * Inputs:
      * L, a list (Macaulay2Doc), a list of five coefficients in
        the field K
      * K, a thing (Macaulay2Doc), any field
  * Outputs:
      * an instance of the type EllipticCurveW,

Description
===========

Returns an elliptic curve in Weierstrass with coefficients from the list.

+-----------------------------------------------------------------------------+
|i1 : ellCurve({1,2,3,4,6},GF(29))                                            |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(     |
|                                                                             |
|o1 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|over(GF 29 .))                                                               |
+-----------------------------------------------------------------------------+
|i2 : ellCurve({0,-1,1,-10,-20},QQ)                                           |
|                                                                             |
|o2 = Elliptic Curve defined by Y^2 + 0 XY + 1 Y = X^3 + (-1)X^2 + (-10)X +   |
|                                                                             |
|o2 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|(-20)( over(QQ .))                                                           |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * ellCurve(List,Thing) -- A method for
    creating elliptic curves in Weierstrass form.

ellCurve(Thing,Thing,Thing) -- A method for creating elliptic curves in short Weierstrass form.
***********************************************************************************************

Synopsis
========

  * Function: ellCurve,
  * Usage:
        ellCurve(A,B,K)
  * Inputs:
      * A, a thing (Macaulay2Doc), a coefficient in the field K
      * B, a thing (Macaulay2Doc), a coefficient in the field K
      * K, a thing (Macaulay2Doc), any field
  * Outputs:
      * an instance of the type EllipticCurve,

Description
===========

Returns an elliptic curve in short Weierstrass form given by the equation:
y^2=x^3+Ax+B

+---------------------------------------------------------------------+
|i1 : ellCurve(3,8,GF(13))                                            |
|                                                                     |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))|
|                                                                     |
|o1 : EllipticCurve                                                   |
+---------------------------------------------------------------------+

Ways to use this method:
========================

  * ellCurve(Thing,Thing,Thing), --
    A method for creating elliptic curves in short Weierstrass form.

ellCurveFromjInv -- A method to define an elliptic curve from a given j-invariant.
**********************************************************************************

Synopsis
========

  * Usage:
        ellCurveFromjInv(j)
  * Inputs:
      * j

Description
===========

+-----------------------------------------------------------------------------+
|i1 : ellCurveFromjInv(46/3)                                                  |
|                                                                             |
|                                                                 54       3  |
|o1 = Elliptic Curve defined by Y^2 + 1 XY + 0 Y = X^3 + 0 X^2 + ----X + ----(|
|                                                                2569    5138 |
|                                                                             |
|o1 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|over(QQ .))                                                                  |
+-----------------------------------------------------------------------------+

Ways to use ellCurveFromjInv :
==============================

  * "ellCurveFromjInv(Thing)"

For the programmer
==================

The object ellCurveFromjInv, is a method function (Macaulay2Doc).

EllipticCurve -- The class of elliptic curves in short Weierstrass form.
************************************************************************

Functions and methods returning an object of class EllipticCurve :
==================================================================

  * toShortWForm -- A method to transform an elliptic
    curve from Weierstrass form to short Weierstrass form.

Methods that use an object of class EllipticCurve :
===================================================

  * bruteForceGroupOrder(EllipticCurve)
    -- A brute-force method to count
    the points on an elliptic curve in characteristic different from 2.
  * bruteForceRationalPoints(EllipticCurve)
    -- A brute-force method to
    list the points on an elliptic curve.
  * Discriminant(EllipticCurve) -- A
    method to compute the discriminant of an elliptic curve.
  * EllipticCurve == EllipticCurve
  * ellPoint(List,EllipticCurve), --
    A method for defining point on an elliptic curve.
  * isOnEllCurve(List,EllipticCurve)
    -- A method to check if a point is
    on an elliptic curve.
  * jInvariant(EllipticCurve) -- A method
    to compute the j-invariant of an elliptic curve.
  * "expression(EllipticCurve)" -- see net(EllipticCurve),
  * net(EllipticCurve)

For the programmer
==================

The object EllipticCurve, is a type (Macaulay2Doc),
with ancestor classes HashTable (Macaulay2Doc),
< Thing (Macaulay2Doc).

EllipticCurve == EllipticCurve
******************************

Synopsis
========

  * Operator: == (Macaulay2Doc),

Description
===========

Checks if two elliptic curves are the same.

Ways to use this method:
========================

  * EllipticCurve == EllipticCurve
  * "EllipticCurveW == EllipticCurveW"

EllipticCurveW -- The class of elliptic curves in Weierstrass form.
*******************************************************************

Functions and methods returning an object of class EllipticCurveW :
===================================================================

  * ellCurveFromjInv -- A method to define an elliptic
    curve from a given j-invariant.

Methods that use an object of class EllipticCurveW :
====================================================

  * bruteForceGroupOrder(EllipticCurveW)
    -- A brute-force method to count
    the points on an elliptic curve in characteristic different from 2.
  * bruteForceRationalPoints(EllipticCurveW)
    -- A brute-force method to
    list the points on an elliptic curve.
  * Discriminant(EllipticCurveW) -- A
    method to compute the discriminant of an elliptic curve.
  * "EllipticCurveW == EllipticCurveW" -- see EllipticCurve == EllipticCurve,
  * ellPoint(List,EllipticCurveW),
    -- A method for defining point on an elliptic curve.
  * isOnEllCurve(List,EllipticCurveW)
    -- A method to check if a point is
    on an elliptic curve.
  * jInvariant(EllipticCurveW) -- A
    method to compute the j-invariant of an elliptic curve.
  * "expression(EllipticCurveW)" -- see net(EllipticCurve),
  * "net(EllipticCurveW)" -- see net(EllipticCurve),
  * "toShortWForm(EllipticCurveW)" -- see toShortWForm, --
    A method to transform an elliptic curve from Weierstrass form to short
    Weierstrass form.

For the programmer
==================

The object EllipticCurveW, is a type (Macaulay2Doc),
with ancestor classes HashTable (Macaulay2Doc),
< Thing (Macaulay2Doc).

EllPoint -- The class of points of elliptic curves in short Weierstrass form.
*****************************************************************************

Methods that use an object of class EllPoint :
==============================================

  * - EllPoint
  * EllPoint + EllPoint
  * EllPoint - EllPoint
  * EllPoint == EllPoint
  * "expression(EllPoint)" -- see net(EllPoint),
  * net(EllPoint)
  * "EllPoint * ZZ" -- see ZZ * EllPoint,
  * ZZ * EllPoint

For the programmer
==================

The object EllPoint, is a type (Macaulay2Doc), with
ancestor classes HashTable (Macaulay2Doc), < Thing (Macaulay2Doc).

ellPoint -- A method for defining point on an elliptic curve.
*************************************************************

Ways to use ellPoint :
======================

  * ellPoint(List,EllipticCurve), --
    A method for defining point on an elliptic curve.
  * ellPoint(List,EllipticCurveW),
    -- A method for defining point on an elliptic curve.

For the programmer
==================

The object ellPoint, is a method function (Macaulay2Doc).

EllPoint + EllPoint
*******************

Synopsis
========

  * Operator: + (Macaulay2Doc),
  * Usage:
        P+Q
  * Inputs:
      * P, an instance of the type EllPoint,
      * Q, an instance of the type EllPoint,
  * Outputs:
      * an instance of the type EllPoint,

Description
===========

Computes the sum of two points.

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                                  |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))        |
|                                                                             |
|o1 : EllipticCurve                                                           |
+-----------------------------------------------------------------------------+
|i2 : P=ellPoint({1,5,1},E)                                                   |
|                                                                             |
|o2 = Point ({1, 5, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +   |
|                                                                             |
|o2 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+
|i3 : Q=ellPoint({2,3,1},E)                                                   |
|                                                                             |
|o3 = Point ({2, 3, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +   |
|                                                                             |
|o3 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+
|i4 : P+Q                                                                     |
|                                                                             |
|o4 = Point ({1, -5, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +  |
|                                                                             |
|o4 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * EllPoint + EllPoint
  * "EllPointW + EllPointW"

EllPoint - EllPoint
*******************

Synopsis
========

  * Operator: - (Macaulay2Doc),
  * Usage:
        P-Q
  * Inputs:
      * P, an instance of the type EllPoint,
      * Q, an instance of the type EllPoint,
  * Outputs:
      * an instance of the type EllPoint,

Description
===========

Computes the difference of two points.

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                                  |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))        |
|                                                                             |
|o1 : EllipticCurve                                                           |
+-----------------------------------------------------------------------------+
|i2 : P=ellPoint({1,5,1},E)                                                   |
|                                                                             |
|o2 = Point ({1, 5, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +   |
|                                                                             |
|o2 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+
|i3 : Q=ellPoint({2,3,1},E)                                                   |
|                                                                             |
|o3 = Point ({2, 3, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +   |
|                                                                             |
|o3 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+
|i4 : P-Q                                                                     |
|                                                                             |
|o4 = Point ({-4, -6, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X + |
|                                                                             |
|o4 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * EllPoint - EllPoint
  * "EllPointW - EllPointW"

EllPoint == EllPoint
********************

Synopsis
========

  * Operator: == (Macaulay2Doc),

Description
===========

Checks if two points are the same.

Ways to use this method:
========================

  * EllPoint == EllPoint
  * "EllPointW == EllPointW"

ellPoint(List,EllipticCurve) -- A method for defining point on an elliptic curve.
*********************************************************************************

Synopsis
========

  * Function: ellPoint,
  * Usage:
        ellPoint(L,E)
  * Inputs:
      * L, a list (Macaulay2Doc), the projective coordinates of the
        point
      * E, an instance of the type EllipticCurve, the
        elliptic curve on which the point lies
  * Outputs:
      * an instance of the type EllPoint,

Description
===========

Returns the point of projective coordinates { L#0 : L#1 : L#2 } on the elliptic
curve E

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                                  |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))        |
|                                                                             |
|o1 : EllipticCurve                                                           |
+-----------------------------------------------------------------------------+
|i2 : P=ellPoint({1,5,1},E)                                                   |
|                                                                             |
|o2 = Point ({1, 5, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +   |
|                                                                             |
|o2 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * ellPoint(List,EllipticCurve), --
    A method for defining point on an elliptic curve.

ellPoint(List,EllipticCurveW) -- A method for defining point on an elliptic curve.
**********************************************************************************

Synopsis
========

  * Function: ellPoint,
  * Usage:
        ellPoint(L,E)
  * Inputs:
      * L, a list (Macaulay2Doc), the projective coordinates of the
        point
      * E, an instance of the type EllipticCurveW, the
        elliptic curve on which the point lies
  * Outputs:
      * an instance of the type EllPointW,

Description
===========

Returns the point of projective coordinates { L#0 : L#1 : L#2 } on the elliptic
curve E

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve({1,2,3,4,6},GF(29))                                          |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(     |
|                                                                             |
|o1 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|over(GF 29 .))                                                               |
+-----------------------------------------------------------------------------+
|i2 : P=ellPoint({1,5,1},E)                                                   |
|                                                                             |
|o2 = The point ({1, 5, 1}( is not on the((Elliptic Curve defined by Y^2 + 1  |
|     ------------------------------------------------------------------------|
|     XY + 3 Y = X^3 + 2 X^2 + 4 X + 6( over(GF 29 .))).)))                   |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * ellPoint(List,EllipticCurveW),
    -- A method for defining point on an elliptic curve.

EllPointW -- The class of points of elliptic curves in Weierstrass form.
************************************************************************

Methods that use an object of class EllPointW :
===============================================

  * "- EllPointW" -- see - EllPoint,
  * "EllPointW + EllPointW" -- see EllPoint + EllPoint,
  * "EllPointW - EllPointW" -- see EllPoint - EllPoint,
  * "EllPointW == EllPointW" -- see EllPoint == EllPoint,
  * "expression(EllPointW)" -- see net(EllPoint),
  * "net(EllPointW)" -- see net(EllPoint),
  * "EllPointW * ZZ" -- see ZZ * EllPoint,
  * "ZZ * EllPointW" -- see ZZ * EllPoint,

For the programmer
==================

The object EllPointW, is a type (Macaulay2Doc),
with ancestor classes HashTable (Macaulay2Doc), < Thing (Macaulay2Doc).

isElliptic -- A method to check if an ideal defines an elliptic curve.
**********************************************************************

Synopsis
========

  * Usage:
        isElliptic(I)
  * Inputs:
      * I, an ideal (Macaulay2Doc),

Description
===========

Given a non-homogeneous ideal in two variables check if it represents a

+-----------------------------+
|i1 : S=ZZ/7[x,y]             |
|                             |
|o1 = S                       |
|                             |
|o1 : PolynomialRing          |
+-----------------------------+
|i2 : I=ideal(y^2-x^3-x-1)    |
|                             |
|              3    2         |
|o2 = ideal(- x  + y  - x - 1)|
|                             |
|o2 : Ideal of S              |
+-----------------------------+
|i3 : isElliptic(I)           |
|                             |
|o3 = true                    |
+-----------------------------+

Ways to use isElliptic :
========================

  * "isElliptic(Ideal)"

For the programmer
==================

The object isElliptic, is a method function (Macaulay2Doc).

isOnEllCurve -- A method to check if a point is on an elliptic curve.
*********************************************************************

Ways to use isOnEllCurve :
==========================

  * isOnEllCurve(List,EllipticCurve)
    -- A method to check if a point is
    on an elliptic curve.
  * isOnEllCurve(List,EllipticCurveW)
    -- A method to check if a point is
    on an elliptic curve.

For the programmer
==================

The object isOnEllCurve, is a method function (Macaulay2Doc).

isOnEllCurve(List,EllipticCurve) -- A method to check if a point is on an elliptic curve.
*****************************************************************************************

Synopsis
========

  * Function: isOnEllCurve,
  * Usage:
        isOnEllCurve(L,E)
  * Inputs:
      * L, a list (Macaulay2Doc), the projective coordinates of the
        point
      * E, an instance of the type EllipticCurve, the
        elliptic curve on which the point lies
  * Outputs:
      * a Boolean value (Macaulay2Doc),

Description
===========

Tells whether the point of projective coordinates { L#0 : L#1 : L#2 } is on the
elliptic curve E

+---------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                          |
|                                                                     |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))|
|                                                                     |
|o1 : EllipticCurve                                                   |
+---------------------------------------------------------------------+
|i2 : isOnEllCurve({1,5,1},E)                                         |
|                                                                     |
|o2 = true                                                            |
+---------------------------------------------------------------------+

Ways to use this method:
========================

  * isOnEllCurve(List,EllipticCurve)
    -- A method to check if a point is
    on an elliptic curve.

isOnEllCurve(List,EllipticCurveW) -- A method to check if a point is on an elliptic curve.
******************************************************************************************

Synopsis
========

  * Function: isOnEllCurve,
  * Usage:
        isOnEllCurve(L,E)
  * Inputs:
      * L, a list (Macaulay2Doc), the projective coordinates of the
        point
      * E, an instance of the type EllipticCurveW, the
        elliptic curve on which the point lies
  * Outputs:
      * a Boolean value (Macaulay2Doc),

Description
===========

Tells whether the point of projective coordinates { L#0 : L#1 : L#2 } is on the
elliptic curve E

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve({1,2,3,4,6},GF(29))                                          |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(     |
|                                                                             |
|o1 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|over(GF 29 .))                                                               |
+-----------------------------------------------------------------------------+
|i2 : isOnEllCurve({1,5,1},E)                                                 |
|                                                                             |
|o2 = false                                                                   |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * isOnEllCurve(List,EllipticCurveW)
    -- A method to check if a point is
    on an elliptic curve.

jInvariant -- A method to compute the j-invariant of an elliptic curve.
***********************************************************************

Ways to use jInvariant :
========================

  * jInvariant(EllipticCurve) -- A method
    to compute the j-invariant of an elliptic curve.
  * jInvariant(EllipticCurveW) -- A
    method to compute the j-invariant of an elliptic curve.

For the programmer
==================

The object jInvariant, is a method function (Macaulay2Doc).

jInvariant(EllipticCurve) -- A method to compute the j-invariant of an elliptic curve.
**************************************************************************************

Synopsis
========

  * Function: jInvariant,
  * Usage:
        jInvariant(E)
  * Inputs:
      * E, an instance of the type EllipticCurve,

Description
===========

+---------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                          |
|                                                                     |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))|
|                                                                     |
|o1 : EllipticCurve                                                   |
+---------------------------------------------------------------------+
|i2 : jInvariant(E)                                                   |
|                                                                     |
|o2 = 3                                                               |
|                                                                     |
|o2 : GF 13                                                           |
+---------------------------------------------------------------------+

Ways to use this method:
========================

  * jInvariant(EllipticCurve) -- A method
    to compute the j-invariant of an elliptic curve.

jInvariant(EllipticCurveW) -- A method to compute the j-invariant of an elliptic curve.
***************************************************************************************

Synopsis
========

  * Function: jInvariant,
  * Usage:
        jInvariant(E)
  * Inputs:
      * E, an instance of the type EllipticCurveW,

Description
===========

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve({1,2,3,4,6},GF(29))                                          |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(     |
|                                                                             |
|o1 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|over(GF 29 .))                                                               |
+-----------------------------------------------------------------------------+
|i2 : jInvariant(E)                                                           |
|                                                                             |
|o2 = 2                                                                       |
|                                                                             |
|o2 : GF 29                                                                   |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * jInvariant(EllipticCurveW) -- A
    method to compute the j-invariant of an elliptic curve.

net(EllipticCurve)
******************

Synopsis
========

  * Function: net (Macaulay2Doc),

Description
===========

Prints nicely an elliptic curve.

Ways to use this method:
========================

  * net(EllipticCurve)
  * "net(EllipticCurveW)"

net(EllPoint)
*************

Synopsis
========

  * Function: net (Macaulay2Doc),

Description
===========

Prints nicely a point on an elliptic curve.

Ways to use this method:
========================

  * net(EllPoint)
  * "net(EllPointW)"

toShortWForm -- A method to transform an elliptic curve from Weierstrass form to short Weierstrass form.
********************************************************************************************************

Synopsis
========

  * Usage:
        toShortWForm(E)
  * Inputs:
      * E

Description
===========

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve({1,2,3,4,6},GF(29))                                          |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 + 1 XY + 3 Y = X^3 + 2 X^2 + 4 X + 6(     |
|                                                                             |
|o1 : EllipticCurveW                                                          |
|-----------------------------------------------------------------------------|
|over(GF 29 .))                                                               |
+-----------------------------------------------------------------------------+
|i2 : toShortWForm(E)                                                         |
|                                                                             |
|o2 = Elliptic Curve defined by Y^2 = X^3 + 11 X + (-4)( over(GF 29 .))       |
|                                                                             |
|o2 : EllipticCurve                                                           |
+-----------------------------------------------------------------------------+

Ways to use toShortWForm :
==========================

  * "toShortWForm(EllipticCurveW)"

For the programmer
==================

The object toShortWForm, is a method function (Macaulay2Doc).

toWeierstrass -- A method to transform a smooth plane cubic into Weierstrass form.
**********************************************************************************

Synopsis
========

  * Usage:
        toWeierstrass(List,List,Thing)
  * Inputs:
      * L, the coefficients of a plane cubic.
      * O, the coordinates of a point over the curve.
      * K, any field
  * Outputs:
      * an instance of the type EllipticCurve,

Description
===========

The method use the a modified version Nagell's algorithm which works in any
characteristic.

Reference: Tibouchi, M. ''A Nagell Algorithm in Any Characteristic'',
Cryptography and Security: From Theory to Applications, 474--479, 2012.

+------------------------------------------------------------+
|i1 : toWeierstrass({-1,0,+1,0,0,+1,0,-1,0,+2},{1,2,1},ZZ/13)|
|The point is not on the curve                               |
+------------------------------------------------------------+

Ways to use toWeierstrass :
===========================

  * "toWeierstrass(List,List,Thing)"

For the programmer
==================

The object toWeierstrass, is a method function (Macaulay2Doc).

ZZ * EllPoint
*************

Synopsis
========

  * Operator: * (Macaulay2Doc),
  * Usage:
        n*P
  * Inputs:
      * n, an integer (Macaulay2Doc),
      * P, an instance of the type EllPoint,
  * Outputs:
      * an instance of the type EllPoint,

Description
===========

Computes the multiple of a point using the double and add algorithm.

+-----------------------------------------------------------------------------+
|i1 : E=ellCurve(3,8,GF(13))                                                  |
|                                                                             |
|o1 = Elliptic Curve defined by Y^2 = X^3 + 3 X + (-5)( over(GF 13 .))        |
|                                                                             |
|o1 : EllipticCurve                                                           |
+-----------------------------------------------------------------------------+
|i2 : P=ellPoint({1,5,1},E)                                                   |
|                                                                             |
|o2 = Point ({1, 5, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +   |
|                                                                             |
|o2 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+
|i3 : 4*P                                                                     |
|                                                                             |
|o3 = Point ({-1, 2, 1}( on the (Elliptic Curve defined by Y^2 = X^3 + 3 X +  |
|                                                                             |
|o3 : EllPoint                                                                |
|-----------------------------------------------------------------------------|
|(-5)( over(GF 13 .)))))                                                      |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * "EllPoint * ZZ"
  * "EllPointW * ZZ"
  * ZZ * EllPoint
  * "ZZ * EllPointW"