I removed the list of things to do from this site, because it is outdated and probably not helpful to anyone but me. From now I’ll post items if I want to make my plans public.
I’ve been working on a faster implementation of finite fields. It is almost the same as the naive implementation that consists mostly of GMP wrappers, but is slightly more efficient because it avoids some dynamic memory allocation (once the modulus is known, the number of GMP limbs needed to store field elements is fixed) and can call low-level GMP functions.
The new implementation has some drawbacks: notably setting an element to a low integer, especially zero or one, is much slower because now a whole array has to be cleared, whereas before GMP would only need to change the _mp_size field. This slows down some of my pairing code. At the moment I’m removing such calls on F pairings (I have already fixed D pairings), and will release once that is done.
Next I want to implement finite fields using Montgomery reduction. I had already tried this once before, but due to bad coding it was slower than the simple implementation. With more experience with GMP internals, I’m confident I’ll be able to make it fast this time, which will benefit all pairings.
Preprocessing has been implemented for A and D pairings, the former benefiting greatly from this. See the benchmarks page.
Some minor bugfixes. Code cleanup: started removing include statements from header files that are used internally by PBC (see the last section in Rob Pike’s notes on programming in C). And the previous tarballs left out a header file.
I renamed type BGN pairings to type A1.
I wrote more of the manual. Now it describes how to generate pairing parameters, and some of the gory behind-the-scenes details of PBC.
I also modified the contributed code so it comforms to the way I do things.
I’ve been working on PBC fairly intensely and yet there have been no performance improvements. Most of the work has been manual labour. The documentation is in much better shape now, and includes a tutorial that I hope will show how easy it is to write cryptography applications using the library.
I also made some API changes. It is now possible to implement cryptosystems without knowing the details of PBC library types, and also without calling any GMP functions. I thought about adding more wrapper data types so that type checking will prevent elements of G1, G2, GT and Zr getting mixed up, but I felt that the library is usable enough as it is, and I have other priorities.
It might be a while before I can start working on optimizations. I still want to clean up the build system a little, make a few more API changes, and of course, keep adding documentation.