|
|
@@ -0,0 +1,120 @@ |
|
|
|
Important work items for Ed448-Goldilocks: |
|
|
|
|
|
|
|
* Import SHA-512 or SHA-3. |
|
|
|
* Decide which. |
|
|
|
* Get a public-domain version which is 64-bit and 32-bit clean. |
|
|
|
* Update LICENSE and README to reflect that SHA is not my code. |
|
|
|
* Incorporate hashing into goldilocks_shared_secret. |
|
|
|
* It's a pretty terrible shared secret right now. |
|
|
|
* Decide on output size |
|
|
|
|
|
|
|
* Documentation: write high-level API docs, and internal docs to help |
|
|
|
other implementors. |
|
|
|
|
|
|
|
* Documentation: write a spec or add to Watson's |
|
|
|
|
|
|
|
* Cleanup: rename everything consistently. |
|
|
|
* namespace_op or op_namespace? namespace_op_type? |
|
|
|
* We don't have to be super-careful with the namespacing, because |
|
|
|
symbols will be scrubbed by exported.sym. |
|
|
|
|
|
|
|
* Cleanup: hard-coded tables (probably?) |
|
|
|
* This reduces the work required for goldilocks_init() at the expense |
|
|
|
of library size. |
|
|
|
|
|
|
|
* Makes error-handling and thread safety easier. |
|
|
|
|
|
|
|
* Use the SAGE tool? |
|
|
|
|
|
|
|
* Cleanup: unify intrinsics code |
|
|
|
* Word_t, mask_t, bigregister_t, etc. |
|
|
|
* Generate asm intrinsics with a script? |
|
|
|
|
|
|
|
* Bugfix: make sure that init() and randomization are thread-safe. |
|
|
|
|
|
|
|
* Security: check on deserialization that points are < p. |
|
|
|
* Check also that they're nonzero or otherwise non-pathological? |
|
|
|
|
|
|
|
* Testing: |
|
|
|
* Corner-case testing |
|
|
|
* more bulk random testing |
|
|
|
* SAGE-(auto?)-generated test vectors |
|
|
|
* Test the Barrett fields |
|
|
|
|
|
|
|
* Safety: add static analysis attributes for compilers that support them |
|
|
|
* EG, warn on ignored return types |
|
|
|
|
|
|
|
* Safety: |
|
|
|
* Check for init() if it's still required once we've done the above |
|
|
|
* Decide what to do about RNG failures |
|
|
|
* abort |
|
|
|
* return error and zeroize |
|
|
|
* return error but continue if RNG is kind of mostly OK |
|
|
|
|
|
|
|
* Flexibility: decide which API options are good. |
|
|
|
* Eg, should functions take nbits and table sizes? |
|
|
|
|
|
|
|
* Remove hardcoded adjustments from comb control. |
|
|
|
* These adjustments make the output wrong when it's not 450 bits. |
|
|
|
|
|
|
|
* Other slow Barrett fields? Montgomery fields? |
|
|
|
|
|
|
|
* Mid-level API |
|
|
|
* Make it easier to work with untwisted Edwards objects. |
|
|
|
* Probably use extended or projective, not extensible coordinates. |
|
|
|
* Scalarmul with other cofactor modes. |
|
|
|
|
|
|
|
* High-level API: |
|
|
|
* Signatures. |
|
|
|
* Decide on strictness level. |
|
|
|
|
|
|
|
* SPAKE2 Elligator Edition? Maybe write a paper first. |
|
|
|
|
|
|
|
* Elligator. |
|
|
|
* Need to write Elligator inverse. Might not be Elligator-2S. |
|
|
|
|
|
|
|
* What low-level APIs to expose? |
|
|
|
* Edwards points with add, sub, scalarmul, =, ==, ser/deser? |
|
|
|
|
|
|
|
* Portability: try to make the vector code as portable as possible |
|
|
|
* Currently using clang ext_vector_length. |
|
|
|
* I can't get a simple for-loop to autovectorize :-/ |
|
|
|
* SAGE tool? |
|
|
|
|
|
|
|
* Portability: make the inner layers of the code 32-bit clean. |
|
|
|
* Write new versions of the field code. |
|
|
|
* 28-bit limbs give less headroom for carries. |
|
|
|
* NEON and vectorless ARM. |
|
|
|
|
|
|
|
* Run through the SAGE tool to generate new bias & bound. |
|
|
|
|
|
|
|
* Portability: make the outer layers of the code 32-bit clean. |
|
|
|
* I don't think that there are endian bugs, but who knows? |
|
|
|
|
|
|
|
* NEON and vectorless constant-time comparison. |
|
|
|
|
|
|
|
* Performance: write and incorporate some extra routines |
|
|
|
* Deserialize_and_isogeny |
|
|
|
* Unconditional negate (or just plain subtract) |
|
|
|
|
|
|
|
* Performance: fixed parameters? |
|
|
|
* Perhaps useful for comb precomputation. |
|
|
|
|
|
|
|
* Performance: improve the Barrett field code. |
|
|
|
* Support other primes? |
|
|
|
* Capture prime shape into a struct instead of passing 3 params. |
|
|
|
* Make 32-bit clean. (SAGE?) |
|
|
|
|
|
|
|
* Automation: |
|
|
|
* Improve the SAGE tool to cover more cases |
|
|
|
* Real SSA classes to cover branching and looping |
|
|
|
* Constant-time selection |
|
|
|
* Intrinsics code |
|
|
|
* Field code? |
|
|
|
|
|
|
|
* Vector-mul-chains |
|
|
|
* Negation "bubble pushing" optimization |
|
|
|
|
|
|
|
* Clear other TODO/FIXME/HACK/PERF items in the code |
|
|
|
|
|
|
|
* Submit to SUPERCOP |