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
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
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
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.