Esta página fue actualizada por última vez el Agosto 2011 y es precisa con la versión 0.8.7 del router I2P.

Vista general

Usando JNI (Interfaz nativo de Java), un poco de código C (¡gracias ugha!), un poco de trabajo manual y un trozo de chicle hemos hecho que varias operaciones de cifrados sean un poco más rápidas.

El aumento de velocidad se debe a la súper rápida librería GNU MP Bignum (libgmp). Sólo usamos una función de libgmp - mpz_powm() como reemplazo de la modPow() BigInteger en la librería Java Math. Ya que modPow() es una importante parte de los cálculos de cifrados, se consigue un beneficio sognificante.

La instalación estándar de I2P incluye como 20 versiones de la librería para diferentes plataformas, dentro del archivo jbigi.jar, cada una sobre 50kb. El inicio de la librería JBigl, la identificación de la CPU, selección y extracción del módulo correcto a cargar es manejado por la clase NativeBigInteger. Si no hay un módulo disponible para la plataforma usada, se usará la librería estándar modPow() BigInteger de Java Math library.

Recompilando y probando JBigl

Aquí están las instrucciones para compilar una nueva librería jbigi para su propia plataforma y poder probar su rendimiento.

Dependencias

Funciona en Linux con unos pocos cambios en build.sh, probablemente también en otras plataformas. En Kaffe el aumento de velocidad es muy pequeño, porque ya usa internamente el BitInteger nativo. Blackdown parece producir errores extraños. Ya que va a compilar necesita JDK; el JRE no funcionará.

El código necesario está disponible en monotone y en el último tarball de las fuentes.

Necesita instalar la librería GNU MP Bignu (libgmp), si no está incluida en su OS / distribución puede obtenerla de http://gmplib.org/#DOWNLOAD. Incluso si ya tiene instalada como un binario, vale la pena compilar GMP por usted mismo, ya que de esta forma será capaz de usar las instrucciones específicas de su procesador. Probablemente se pueda usar la última versión de GMP en vez de la 5.0.2, pero no ha sido probado por nosotros.

Instrucciones paso a paso

  1. Mire en , en la web de los registros, el entorno que está ejecutando . Deberían aparecer uno o dos mensajes sobre JBigi Librería nativa local optimizada BigInteger has sido cargada satisfactoriamente. o La librería nativa BigInteger jbigi no ha sido cargada - usando java puro.. Si la librería nativa BigInteger NO ha sida cargada, definitivamente necesita compilarla. Algunas plataformas, como OS X, OpenSolaris y los sistemas de 64 bits, pueden necesitar que compile su propia librería. Si la librería BigInteger se ha cargado, al menos haga el siguiente paso para comprobar su rendimiento.
  2. Mire en http://localhost:7657/stats.jsp para ver cuales son los valores medios del tiempo de vida para crypto.elGamal.decrypt y crypto.elGamal.encrypt. Los números son el tiempo en mili segundos. Cópielos para poder compararlos más tarde. El tiempo medio de cifrado es alrededor de 20ms. Si el tiempo de cifrado es menor de 50ms para un procesador relativamente nuevo, o menos de 100ms para un procesador viejo, y la librería BigIntefer ha sido cargada, probablemente esté todo bien.
  3. Obtenga las últimas sources de I2P desde la página de descargas, u obtenga el código más actualizado desde la base de datos de monotone en mtn.i2p2.de
  4. Dentro del directorio de las fuentes cambie a la carpeta: core/c/jbigi
  5. Lea el archivo README. Si ya tiene un archivo /usr/lib/libgmp.so, no necesita descargar GMP. Use la opción 'dynamic' para build.sh. De otra forma, también puede descargar la versión 5.0.2 de GMP desde href="http://gmplib.org/#DOWNLOAD">http://gmplib.org/#DOWNLOAD, guardándolo como gmp-5.0.2.tar.bz2. Si decide usar una versión más nueva, cambie la línea VER= en core/c/jbigi/build.sh.
  6. Échele un vistazo a build.sh, si su variable de entorno JAVA_HOME está puesta y usa Linux, simplemente debería funcionar. En caso contrario, cambie las configuraciones. Recuerde, necesita tener instalado el SDK de Java.
  7. Ejecute build.sh (si ha descargado GMP) o build.sh dynamic (si ya tiene /usr/lib/libgmp.so).
    Quizás al compilar le arroje algunos errores sobre la falta de los archivos jni.h y jni_md.h. Puede copiar estos archivos desde su instalación de java al directorio core/c/jbigi/jbigi/include/, o arregle su $JAVA_HOME.
    Puede ejecutar build.sh desde el directorio core/c/, lo cual compilará todas las librerías jbigi disponibles dentro de jbigi.jar.
    . En dicho directorio debería crearse un archivo llamado libjbigi.so. Si no aparece y/o obtiene errores, por favor repórtelo.
  8. Siga las instrucciones de core/c/README para instalar la librería y ejecutar las pruebas de velocidad. Lea las últimas líneas del test de velocidad para obtener información adicional, debería ser algo como esto:
    native run time:  5842ms ( 57ms each)
    java run time:   41072ms (406ms each)
    native = 14.223802103622907% of pure java time
    
    Si el nativo es 5-7 veces más rápido (o más), entonces todo está bien. Si no, avísenos.
  9. Copie libjbigi.so a su carpeta i2p
  10. Reinicie sus programas I2P
  11. En http://localhost:7657/stats.jsp las velocidades en crypto.elGamal.decrypt y crypto.elGamal.encrypt deberían ser mucho más rápidas.