Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Twice faster Jacobian quotients #13

Merged
merged 9 commits into from
Aug 6, 2022

Commits on Aug 5, 2022

  1. Configuration menu
    Copy the full SHA
    5cf5a09 View commit details
    Browse the repository at this point in the history
  2. Factor out and accelerate Richelot correspondence

    This makes FromJacToJac about 50% faster, mostly from
    avoiding switching rings and variable substitutions,
    and computing manually the expansion as symmetric functions.
    remyoudompheng committed Aug 5, 2022
    Configuration menu
    Copy the full SHA
    abf3cde View commit details
    Browse the repository at this point in the history
  3. Remove costly no-op calls in Coefficient

    The polynomial argument is no longer an element
    of the fraction field.
    remyoudompheng committed Aug 5, 2022
    Configuration menu
    Copy the full SHA
    b4ae10e View commit details
    Browse the repository at this point in the history
  4. Add hints when constructing 3-isogenies

    The point is already known to be of order 3 so providing
    information to the constructor avoids unnecessary work.
    remyoudompheng committed Aug 5, 2022
    Configuration menu
    Copy the full SHA
    9b07ef7 View commit details
    Browse the repository at this point in the history
  5. Rebalance precomputed powers in FromJacToJac

    The cost of apply the Richelot isogeny determines how many
    precomputed Jacobian point powers are worth keeping between
    FromJacToJac iterations.
    
    Since the image computation is now twice faster, we can
    pass around a second precomputed power to keep balance.
    remyoudompheng committed Aug 5, 2022
    Configuration menu
    Copy the full SHA
    0abfba7 View commit details
    Browse the repository at this point in the history
  6. Implement a local specialized version of Jacobian doubling

    This allows for minor simplifications and is about 10% faster.
    remyoudompheng committed Aug 5, 2022
    Configuration menu
    Copy the full SHA
    bceb0e3 View commit details
    Browse the repository at this point in the history
  7. Get rid of most calls to monic()

    SAGE monic() method on polynomials is very generic and
    often slow due to going through many layers of Python objects.
    
    It turns out that all Jacobian doubling formulas are also
    compatible with non-monic Mumford coordinates so relaxing that
    constraint saves some operations and accelerates computation
    by about 10%.
    remyoudompheng committed Aug 5, 2022
    Configuration menu
    Copy the full SHA
    1d80a72 View commit details
    Browse the repository at this point in the history
  8. Slightly simpler computation of H polynomials

    Looking carefully at the coefficients of polynomials H1,H2,H3
    they turn out to be almost exactly the coefficients of the inverse
    matrix. This removes some redundant computations as the determinant
    computation needs very similar operations.
    remyoudompheng committed Aug 5, 2022
    Configuration menu
    Copy the full SHA
    427c730 View commit details
    Browse the repository at this point in the history
  9. Make SAGE use Vélu's formulas rather than Kohel formulas

    Initialisation of isogenies in SAGE is much faster when using
    points as arguments rather than polynomials.
    
    On SIKE_challenge this is a 10%-15% speedup.
    remyoudompheng committed Aug 5, 2022
    Configuration menu
    Copy the full SHA
    5eb772b View commit details
    Browse the repository at this point in the history