libecc-0.11.1 This release fixes the build system to work with the latest versions of autoconf/automake and compiler. I now also included the test programs that I was using to 'crack' parameter b in 2004 (no documentation yet though). I have been holding this back for a while because I thought I might have some break-through - but I now realize that I am too busy with other things; I should just release what I have. Most interesting are relationships that I found between the number of points on an elliptic curve with even m and those of a curve over a field with degree m/2. If m = 2^x * y, where y is odd, then the cardinality of the curve can be expressed in the cardinality of any curve over a field with degree y. I already found this result in 2004, after a few weeks of mathematical research (driving my parents crazy). If you are interested in the relationship, contact me. libecc-0.11.0 This release extends the library to also work with reduction polynomials of degree five (pentanomials). A way to calculate the trace of an element of a binary field in constant time (no precalculation needed) is presented and implemented. polynomial::trace() returns the trace of the polynomial with just a few assembly instructions. The heavy mathematics that this result is based on can be found in the documentation in the chapter 'Theory: The trace of a field element'. libecc-0.10.0 A major step has been made towards completely cracking the problem of the order of an elliptic curve. This new insight is published in the new theory chapter "cracking parameter b". libecc-0.9 A theory pages were added about the Frobenius map and the trace of an element of a field extension. A beginning was made with a theory page about general group theory. The elliptic curve parameter 'a' has been fully analyzed and "worked out of the equation". A new method polynomial::trace has been added that returns the trace of the element passed to it. A second method was added, polynomial::normal, that returns a vector that is normal to the hyperplane formed by all elements whose trace is 0. libecc-0.8 testsuite/point/pointTest.cc now also determines the group structure for every value of a and b. Code to decode the group structure was added as decode_group_structure.cc in the same directory. The theory behind the decoding was added in a separate page: "Theory: the structure of Abelian groups." The theory page about point counting was extended with graphs of brute force point counting (the actual results of testsuite/point/pointTest.cc) and a first analysis is being made, showing that the curve parameter a has two 'modes' corresponding to two 'opposite' values of cardinality. The code that was used to determine this has been added to testsuite/point/plot.cc and the theory was added to "Theory: points on an Elliptic Curve." libecc-0.7 Version 0.6 was totally broken in regard to class point. It was using the wrong elliptic curve equation and the testsuite actually lacked any testing of the class at all. The class polynomial was instable because it allowed one to use objects with references to already destructed temporaries. This has been fixed by disallowing to add more than two terms on one line: (p1 + p2 + p3). (p1 += p2 + p3 is still allowed). Theory pages have been majorly improved again. One major change is that formulas now use HTML instead of LaTeX generated images where possible. This greatly reduces the number of .png files that need to be loaded; sourceforge was throttling clients who tried to read the theory pages because of the many subsequent connection attempts needed with several hunderd images on a page. The debugging code (and --enable-debug) have been fixed to conform to the current version of libcwd (0.99.39). testsuite/point/pointTest.cc now actually _tests_ the point class, which lead to finding a lot of bugs in this code. These bugs have been fixed. This test code now also calculates the order(s) of all points for every curve and generates plot data that is compatible with gnuplot 4.0. libecc-0.6 Added class libecc::point, representing a point on an elliptic curve x^3 + bx + a = y^2 + xy over GF(2^m). The file TRINOMIALS was updated, using the latest factorizations of the Cunningham project. The theory on finite fields has been greatly improved. The source code has been fixed to be more conforming the C++ standard and compiles again with the latest compilers (g++ 3.4.2). libecc::bitset_index::operator unsigned int () const has been removed. Automatic conversion to an int type is bad (see Meyers) and indeed it let to problems for me. Use libecc::bitset_index::get_index() instead. libecc-0.5 The tool find_trinomials was extented to find all irreducible and primitive trinomials of degree less than 1200, as opposed to only trinomials of prime degree. Libecc is now dependent on GNU mp, see http://swox.com/gmp/ and for example http://swox.com/gmp/manual/C---Interface-Integers.html#C++%20Interface%20Integers for documentation on gmp (Multi-Precision library). NOTE: you have to configure gmp with --enable-cxx! See http://swox.com/gmp/manual/Build-Options.html#Build%20Options Also, if you are using a compiler version that is not the default on your system, make sure that you compile libgmpxx with that compiler as well! You will probably install gmp with a non-default prefix in that case: make sure that you add the needed -I and -L flags to CPPFLAGS and LDFLAGS during configuration of libecc or otherwise libtool might find the wrong libgmpxx.so (or not any at all). Most of the code of bitset has been rewritten in assembly for i386. Removed bitset::digitset(). bitset_digit_t was changed to an `unsigned long' as it turns out that most 64 bit OS still define `int' as a 32 bit word. Added to bitset: bitset(bitset_digit_t low_bits), a constructor for a bitset with only a few bits set. Added bitset::const_iterator and bitset::const_reverse_iterator along with all the methods that can be expected. These iterators also contain a function 'find1' that finds the next '1' in the bitset. Added bitset::xor_with_zero_padded(), used in the new modular division algorithm. A superior algorithm has been used to calculate the modular field division of polynomials. Division is now only four times slower than multiplication (which was also speed up considerably). Added to polynomial: unity(), a static function returning the multiplicative unity (1), and polynomial(bitset_digit_t coefficients), a constructor for a polynomial of low degree. A new header file was added: libecc/fieldmath.h. This header file defines a few number theoretic functions. Currently `exponentiation' and `gcd'. libecc-0.4 Added class libecc::polynomial. A polynomial representation of GF(2^m)/F(t) with primitive reduction polynomial F(t) = t^m + t^k + 1. See the file TRINOMIALS for a list of primitive trinomials. libecc-0.3.1 Library and testsuite now compile with g++-2.96-98. libecc-0.3.0 Added class sha1. A Secure Hash Algorithm (SHA-1) implementation. libecc-0.2.1 testsuite/bitsetTestShiftRotate.hcc was missing. libecc-0.2.0 Added class rng. A pseudo random number generator. Comes with theory, a build kit and extensive test results. libecc-0.1.0 Added template class bitset. Comes with a huge testsuite. libecc-0.0.2 libecc/debug_config.h was renamed to libecc/config.h because this file reflect general configuration and not only debugging related configuration of libecc. The doxygen file descriptions have been improved. This didn't work with doxygen 1.2.12 so I had to upgrade to 1.2.17, which therefore the minimum requirement now (although older version might work). A doxygen Main Page has been added presenting the Table of Contents. libecc-0.0.1 Bug fixes: BUILT_SOURCES should only contain sources that are needed for the target 'build'. 'libecc.spec' was therefore moved from BUILT_SOURCES to EXTRA_DIST and added as dependency to target 'dist-hook'. The version in documentation/doxygen.config is now also taken care of by 'configure', introducing a documentation/doxygen.config.in instead. 'doxygen.config' has been added as dependency to target 'reference-manual' of the Makefile in documentation/. index.html did not appear in the rpm for some reason (bug in rpm). The style sheet wasn't loaded properly when loading the rpm-installed index.html. libecc-0.0.0 First public release. This release contains no source files, only a build-framework. This frame work has support for: - bootstrapping a source tree that was checked out from CVS - automake/autoconf/libtool - doxygen generated documentation - Makefile targets 'build', 'install', 'clean', 'distclean', 'maintainer-clean', 'dist', 'rpm' and 'syncwww'. - libcwd and --enable-debug, --disable-debug-output Documentation is available from the tar ball as well as from the web (http://libecc.sourceforge.net/).