libecc an alinoe production
Home Page
Reference Manual
List of trinomials

Libecc is an elliptic curve crypto library for C++ developers.  It is currently in development.
20 Febuari 2011

libecc 0.14.0 has been released.  When I released 0.13.0 I already knew that it was broken for 32-bit, I just thought that it wouldn't affect polynomial calculations, I thought I could fix it within two days, and I didn't think anyone would download 0.13.0 within those two days anyway... (so why release 0.13.0 at all? Well, I was just so happy to have fixed the incredibly hard to find strict-aliasing bug, and it DID fix it for 64-bit: who is still using 32-bit in 2011? Hahaha). However, this was far from easy to find. It took me a week, during which 42 people downloaded 0.13.0 :(. I'm sorry! The problem turned out to be missing clobbers in the inline assembly code for i686, resulting in undefined behavior when compiling with optimization on. I (still) believe that this only affected expressions with bitsets of different sizes however, so it shouldn't have affected computations related to elliptic curves... I hope. Anyway -- this version passes the testsuite again, also for 32 bits!

14 Febuari 2011

libecc 0.13.0 has been released.  Fixed compile issues with newer compilers. Most notably, a strict-aliasing bug for polynomial division has been fixed. Strict aliasing has become the default since g++ 4.4, so if you use that compiler or higher you MUST upgrade to libecc 0.13.

2 May 2008

libecc 0.12.1 has been released.  I extended the chapter "Cracking parameter b of the elliptic curve" dramatically. A recursive formula is presented for the number of solutions to y2 + xy = x3 + 1 over F2m as function of m. This journey is by far not finished, but I thought it was a milestone enough to warrant another release (and update of this chapter).

9 April 2008

libecc 0.12.0 has been released.  This is a work of years... Especially since I'm not working on it, for years on a row. However, the fans of libecc will be happy-- I said, they will be HAPPY-- to know that this release adds support for x86_64! I think it's roughly twice as fast as on 32-bit x86 with assembly.

Moreover, Cracking parameter b has been extended! So, more exciting reading ahead! Unfortunately, it isn't finished; but what I had has been laying around a year, so I thought I'd put it on the net as-is before I continue with it.

Finally, several mysterious, vague "test" programs have been added to the testsuite that even I don't know anymore what they are doing. For the adventurous thus.

22 November 2006

libecc 0.11.1 has been released.  This release fixes the build system to compile again with the current autoconf/automake and compiler versions. Amazing how terrible a piece of software can break if it just sits there for two years. Anyway, it's completely up to date again. All testsuite applications compile and run; all compile errors fixed, even all compile warnings fixed. I also added a few new test applications that I wrote in 2004 but had held back because they were labelled 'top secret'. Didn't add documentation for them though.

11 December 2004

libecc 0.11.0 has been released.  This release extends the library to also work with reduction polynomials of degree five (pentanomials).  I needed this for my research regarding parameter 'b' of the elliptic curve: I need all the data points that I can get.

A way to calculate the trace of an element of a binary field in constant time (no precalculation needed) is presented and implemented.  This new conjecture (I didn't prove it yet) is published here.

24 November 2004

libecc 0.10.0 has been released.  This release has been made because of a major insight that I had today which brings the question of how many points there are on an elliptic curve, back to a very simple formula: Tr(x + b/x2) = 0. At this moment I do not know if this is a breakthrough or not, but just in case it is, I thought I should publish it!

23 November 2004

libecc 0.9.0 has been released.  Heavy mathematical wizardry makes the elliptic curve parameter 'a' disappear (except for one bit) in this release.  But don't worry, it is all explained in detail with lots of examples.

11 November 2004

libecc 0.8.0 has been released.  This release is a beauty again.  The brute force point counting data (up till elliptic curves over F210) is presented and partly analysed.

A start has been made in determining the relationship between the curve parameter a and the structure of the Abelian groups formed by the points on the elliptic curves.  An indepth theory page about the structure of Abelian groups has been added.  This release contains new code that allows one to determine the structure of the Abelian group from the count of points and their order as well as code that determines the normal of the hyperplane in the 'a-space' that represents curves with constant cardinality (but more on that in the next release!)

29 October 2004

libecc 0.7.0 has been released.  Lets admit it, version 0.6.0 should never have been released.  It was the state of the library after I "left" it 1.5 years ago, just patched enough to compile with modern compilers.  Unfortunately, after its release I found out that the testsuite actually totally lacked any testing of the point class, and that the latter was totally and utterly broken.  It was also discovered that class polynomial had a nasty bug: adding three terms on one line (ie, (p1 * p2) + p3 + p4), would use an already destructed temporary - which could be overwritten on the stack before it was used again!  This was not tested in the testsuite of polynomial but revealed by the code of class point.  This version fixes this problem by disallowing to do that (it won't compile anymore).  You now have to split up such equations over two or more lines.

The theory pages of this released have been greatly improved: apart from fixing some glitches and having additions to make things better understandable, it now uses HTML code for most of the formulas.  This should speed up downloading of those pages, especially because sourceforge started to throttle download as a result of the many connection attempts for all those little formula .png's - downloading the theory pages was near impossible!

23 October 2004

libecc 0.6.0 has been released.  The release adds an implementation of a class representing points on elliptic curves over GF(2^m).  You probably thought that I was contacted by the CIA who forced me to stop breaking their backdoors in the FIPS provided elliptic curves, but no that is not anything like it.  The reason that there has been such a huge delay between this and the previous release is that initially I did not want to make a new release before I was able to provide my own Safe Elliptic Curves.  In order to do that, one needs to be able to determine the number of solutions of some given elliptic curve over GF(2^m), and the mathematics involved with that are so difficult that I had to gave up.  Recently I started to study mathematics in earnest again in order to crack this problem; so we're back on track again although I cannot promise that I will succeed.  This release contains the stuff that I had at the point that I gave up about 1.5 years ago, although I recently fixed the code to conform more to ISO C++ so that it now compiles with the latest compilers (tested with g++ 3.4.2).  I've also fixed a few major errors in my 'theory' chapter about polynomials over Galois Fields; clearly I had no clue what the characteristic of a field was two years ago ;).  The 'theory' chapters included with this library are still not of a high mathematical level - but that has never been the aim.  The targetted audience are people who didn't study mathematics, (like myself, my university background in physics).  As a result however, it is often not possible to provide a sound prove of anything and most things are presented in a way between "making it plausible" and "just swallow it for a fact".  However if you are not a mathematician but you enjoy this kind of stuff anyway, then you might have a lot of fun studying the material of this library and playing with it a little bit.

14 Januari 2003

libecc 0.5.0 has been released.  This release includes all irreducible trinomials of degree less than 1200 with their order (for which factorization of 2^m - 1 is known).  Furthermore, it has been considerably speeded up by using the fastest known algorithm and hand optimized assembly code for every crucial part of the library.

18 November 2002

libecc 0.4.0 has been released.  This release adds an implementation of a polynomial representation of the field F2m using a trinomial reduction polynomial of degree m.  Included are tools to check whether a given trinomial is irreducible and/or primitive.  A list of all irreducible trinomials of prime degree less than 1200 is provided.

20 October 2002

libecc 0.3.0 has been released.  This release adds an implementation of SHA-1 for bitsets.  The implementation was written from scratch but extensively tested using the SHA-1 Sample Vectors provided by NIST.

17 October 2002

libecc 0.2.1 has been released.  There was a file missing in the testsuite.  Only interesting if you want to run the testsuite of course.

16 October 2002

libecc 0.2.0 has been released.  This release includes a new pseudo random number generator (RNG) that never was released before.  The RNG passes the tests of the testsuites diehard, ent and NIST.

25 September 2002

libecc 0.1.0 has been released.  This release adds a bitset.

28 July 2002

libecc 0.0.1 and 0.0.2 have been released.  These versions contain minor improvements of the build system, mostly related to generating documentation.

27 July 2002

First public release of libecc on sourceforge.


Cascading Style Sheets