{% extends "_layout.html" %} {% block title %}jbigi{% endblock %} {% block content %}

Using JNI (Java Native Interface), a bit of C code (thanks ugha!), a little manual work and a piece of chewinggum it is possible to make the public key cryptography quite a bit faster.

Requirements

This works on Linux, and with a few changes in build.sh probably also on other platforms. FreeBSD has also been reported to work too. On Kaffee the speedup is very small, because it already uses native BitInteger internally. Blackdown seems to cause strange errors. Because you are going to do compilation, you need JDK; JRE won't work.

The required code is available in CVS and the latest source tarball.

The GNU MP Bignum library (libgmp) needs to be installed, if it isn't included in your OS / distribution or installed already, it can be received from http://www.swox.com/gmp/. Even if you have already installed it as binary, it might still be worth a try to compile GMP yourself, since then it will be able to use the specific instructions of your processor. The latest GMP 4.2.2 is also possible to be used instead of GMP 4.1.4. But latest GMP 4.2.2 needs more testing before setting the default requirement for building jbigi.jar.

Step-by-step instructions

  1. Look on http://localhost:7657/oldstats.jsp to see what the values for crypto.elGamal.decrypt and crypto.elGamal.encrypt are. The numbers are times in milliseconds. Copy these somewhere so you can compare them later on.
  2. Get the latest sourcecode of I2P out of the monotone database mtn.i2p2.de
  3. Inside the source tree change directory to: core/c
  4. Take a look at build.sh, if your JAVA_HOME environment variable is set and you are using Linux then it might just work. Otherwise change the settings.
  5. Run build.sh
    A file named libjbigi.so should be created in the current directory. If this doesn't happen and/or you get errors then please report them.
    Also some tests are done. Read the final lines of output for some additional info, it will be something like this:
    native run time:  5842ms ( 57ms each)
    java run time:   41072ms (406ms each)
    native = 14.223802103622907% of pure java time
    
    If the native is indeed 5-7x faster then it looks all good. If not, please report.
  6. Copy libjbigi.so to your i2p directory
  7. Restart your I2P programs.
  8. On http://localhost:7657/oldstats.jsp the crypto.elGamal.decrypt and crypto.elGamal.encrypt should be a lot faster.

Feedback is appreciated

{% endblock %}