Go to file
Daira Hopwood f0f7068552 Add test vectors for map_to_simple_swu.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2021-04-27 14:24:13 +01:00
Ep Update parameters for Pallas/Vesta. 2020-11-23 01:09:28 +00:00
Eq Update parameters for Pallas/Vesta. 2020-11-23 01:09:28 +00:00
.gitignore Adapt for Tweedledum/Tweedledee. 2019-09-08 16:23:19 +01:00
LICENSE Add LICENSE and .gitignore. Also fix the curve equation. 2017-11-02 06:16:58 +00:00
README.md README: cosmetics. 2020-11-27 09:35:53 +00:00
addchain_5inv.py Addition chains for 5^-1 (mod p-1, q-1). 2020-12-12 16:46:32 +00:00
addchain_5inv_rtl.py Add right-to-left addition chains for 5^-1 (mod p-1, q-1). 2021-03-19 20:55:49 +00:00
addchain_7inv.py Addition chains for 7^-1 (mod p-1, q-1). 2020-12-12 22:44:56 +00:00
addchain_sqrt.py Implement the optimization from [WB2019, section 4.2] that removes the remaining inversion. 2021-01-01 03:37:41 +00:00
amicable.sage Python 3 portability. 2020-11-23 01:09:28 +00:00
animation-p.webm checksumsets.py: fix an off-by-one error in the final frames of the animation (not the actual check). 2020-11-23 01:09:28 +00:00
animation-q.webm checksumsets.py: fix an off-by-one error in the final frames of the animation (not the actual check). 2020-11-23 01:09:28 +00:00
animation.sh checksumsets.py: add support for generating animations. 2020-06-23 16:27:52 +01:00
base_tables.sage Remove -r personalisations from Sinsemilla Q 2021-03-15 12:54:38 +08:00
checksumsets.py checksumsets.py: fix an off-by-one error in the final frames of the animation (not the actual check). 2020-11-23 01:09:28 +00:00
clean.sh Add clean.sh . 2019-09-17 11:14:04 +01:00
hashtocurve.sage Add test vectors for map_to_simple_swu. 2021-04-27 14:24:13 +01:00
injectivitylemma.py injectivitylemma.py: output information that I used in a slide in my ZK Study Club presentation. 2020-11-19 19:52:22 +00:00
run.sh Update parameters for Pallas/Vesta. 2020-11-23 01:09:28 +00:00
sinsemilla.sage Add sinsemilla.sage. 2021-04-02 17:52:06 +01:00
squareroot.sage Import sys explicitly rather than relying on sage to do it. 2020-11-30 13:28:25 +00:00
squareroottab.sage Sage-on-Python 3 compatibility fixes. 2021-04-21 12:32:27 +01:00
squareroottab16.sage Add isogeny for Vesta. 2021-01-13 01:11:34 +00:00
subgroupcheck.sage subgroupcheck.sage: ensure that progress dots are printed consistently by all threads. 2021-03-01 19:06:09 +00:00
verify.sage Remove requirement for sortedcontainers. 2020-11-27 09:35:20 +00:00

README.md

Pallas/Vesta supporting evidence

This repository contains supporting evidence that the amicable pair of prime-order curves:

  • Ep : y^2 = x^3 + 5 over GF(p) of order q, called Pallas;
  • Eq : y^2 = x^3 + 5 over GF(q) of order p, called Vesta;

with

  • p = 2^254 + 45560315531419706090280762371685220353
  • q = 2^254 + 45560315531506369815346746415080538113

satisfy some of the SafeCurves criteria.

The criteria that are not satisfied are, in summary:

  • large-magnitude CM discriminant (both curves have CM discriminant of absolute value 3, as a consequence of how they were constructed);
  • completeness (complete formulae are possible, but not according to the Safe curves criterion);
  • ladder support (not possible for prime-order curves);
  • Elligator 2 support (indistinguishability is possible using Elligator Squared, but not using Elligator 2);
  • twist security above 100 bits for Pallas.

Pallas/Vesta is the first cycle output by sage amicable.sage --sequential --requireisos --sortpq --ignoretwist --nearpowerof2 255 32.

(The --sequential option makes the output completely deterministic and so resolves ambiguity about which result is "first". For exploratory searches it is faster not to use --sequential.)

Prerequisites:

  • apt-get install sagemath

Run sage verify.sage Ep and sage verify.sage Eq; or ./run.sh to run both and also print out the results.

The output of amicable.sage with the above options includes isogenies of degree 3, suitable for use with the "simplified SWU" method for hashing to an elliptic curve. This is based on code from Appendix A of Wahby and Boneh 2019.

To check the correctness of the endomorphism optimization described in the Halo paper, run python3 injectivitylemma.py and python3 checksumsets.py. To also generate animations showing the minimum distances between multiples of ζ used in the proof, run ./animation.sh.

animation.sh has the following prerequisites:

  • apt-get install ffmpeg ffcvt
  • pip3 install bintrees Pillow

checksumsets.py on its own only requires the bintrees Python package.