Commit 9be01736 authored by Michael Hamburg's avatar Michael Hamburg

update HISTORY and TODO

parent 0016b267
January 15, 2016:
Lots of changes since the last entry in HISTORY.TXT.
Pushing eventually toward a 1.0 release, at least for the curves
themselves (i.e. not for STROBE), still a fair amount of stuff to
I have pretty much all the functions I want implemented, except
that maybe there should be a compatibility mode for whatever CFRG
decides the real life format should be.
The library now supports multiple curves at once. A decaffeinated
curve isogenous to Curve25519 is now supported, but not especially
fast. This is all still a little rough around the edges. To make
it work in a sane way, most of the headers are generated using
Python templates. Probably those should be turned back into .h
files for syntax hilighting purposes; the code generation system
in general needs quite a tuneup.
The plus side is that this reduces the source code size, especially
for supporting many curves over many fields.
Currently the code only kind of halfway works on ARM, and not as
fast as it used to (on NEON anyway), by maybe 15-20%. I'm
investigating why. It's about as fast as it used to be on x86,
maybe a hair slower.
Montgomery ladder is currently out. Putting it back in might help
pin down the ARM NEON performance regression.
The BAT is currently broken.
Tracking at 55 TODO items, about half of which are important-ish.
Source code size is currently 12.8k wc-lines, including tests and
old fields (p480 and p521). I'm still trying to get that down, but
with things like 600 lines of NEON f_impl.c, that's not an easy task.
April 23, 2015:
Removed the original Goldilocks code; Decaf now stands on its own.
This cuts the source code approximately in half, to a still-large
Important work items for Ed448-Goldilocks / decaf:
* Factor out hash, crandom from core library?
[DONE, except for C++ headers]
* Signed 32-bit NEON implementation to avoid bias/reduce after subtract
* Documentation: write high-level API docs, and internal docs to help
other implementors.
* Partial progress on Doxygenating the code.
* Pretty good progress on Doxygenating the code.
* Documentation: write a spec or add to Watson's
......@@ -15,44 +12,42 @@ Important work items for Ed448-Goldilocks / decaf:
* 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 visibility
* Mostly done.
* Cleanup: unify intrinsics code
* Word_t, mask_t, bigregister_t, etc.
* Generate asm intrinsics with a script?
* Testing:
* More testing. Testing, testing and testing.
* Test corner cases better.
* Safety: add static analysis attributes for compilers that support them
* Most functions now have warn on ignored return.
* Safety:
* Decide what to do about RNG failures
* abort
* return error and zeroize
* return error and zeroize [ THIS ]
* return error but continue if RNG is kind of mostly OK
* High-level API: [DONE]
* Portability: test and make clean with other compilers
* Using a fair amount of __attribute__ code.
* [DONE] Should work for GCC now.
* [Should work for GCC now. But not really on ARM.
* 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?
* [DONE] Portability: make the outer layers of the code 32-bit clean.
* [DONE] Performance/flexibility: decide which parameters should be hard-coded.
* Perhaps useful for comb precomputation.
* Portability: make the outer layers of the code 32-bit clean.
* Was [DONE], but a regression on ARM GCC.
* Performance: Improve SHAKE.
* Improve speed. (Maybe)
* Clear other TODO/FIXME/HACK/PERF items in the code
* More curves? E-521 at least? Ed41417?
* CFRG compat modes.
* Submit Decaf to SUPERCOP
......@@ -732,7 +732,7 @@ cond_neg_niels (
cond_neg(n->c, neg);
static void pt_to_pniels (
static NOINLINE void pt_to_pniels (
pniels_t b,
const point_t a
) {
......@@ -742,7 +742,7 @@ static void pt_to_pniels (
gf_add ( b->z, a->z, a->z );
static void pniels_to_pt (
static NOINLINE void pniels_to_pt (
point_t e,
const pniels_t d
) {
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment