ONB version

There is a test program ctest.cpp, elliptic curves curve.hpp, curve.cpp and the underlying Galois fields field.hpp, field.cppand root.cpp.

You also need prime.hpp , prime.cpp , vlong.hpp and vlong.cpp..

The difficult part of Elliptic curve cryptography is finding a suitable a curve and a point on the curve of prime order. My software uses Weil's theorem to generate points with various prime orders. findlk.cpp is a program which computes possible values for l,k in the when calling the constructor for weil_curve. findlk.out is the output. See curve.hpp or ctest.cpp for values which I have tested. It seems k needs to be prime and greater than l to get good results.

For fields GF(2^m), the software uses an optimal normal basis (typeI or II) if possible, otherwise a polynomial basis, which is much slower. I also support curves over GF(p), but there is no software provided to generate suitable curves with points of known order for this case.

Changes

Change(1) I solved the problem of mapping elements of GF(2^l) -> GF(2^l*k) in a more general way than my first version.

Change(2) I have added code for changing between different bases for GF(2^m).

Change(3) (3rd Jan 97) The restriction that GF(2^l) have an ONB was unnecessary, for example l=7,k=17 is ok. The files findlk.cpp and findlk.out have been updated to reflect this.

Rough edges - The handling of random numbers might be better if a range was specified in the call rng::next. Also it would be convenient if a pointer to a rng was associated with each field - there is already a data member for this purpose, which is only used in the basis change code. It should be initialised in the constructor calls.

Send mail to George at george.barwood@dial.pipex.com