Halaman ini terakhir diperbarui pada sAgustus 2011 dan akurat untuk router versi 0.8.7.

Overview

Menggunakan JNI (Java Native Interface), sedikit kode C (terima kasih ugha!), sedikit kerja manual dan sepotong permen karet kami telah melakukan beberapa operasi kriptografi sedikit lebih cepat.

Penambahan kecepatan berasal dari GNU MP Bignum library (libgmp). Kami menggunakan satu fungsi dari libgmp - mpz_powm () sebagai pengganti untuk Java Math library's BigInteger modPow () . Karena modPow() adalah bagian komputasi yang signifikan dari banyak operasi kripto, ini sangat bermanfaat.

Instalasi I2P standar mencakup sekitar 20 versi library untuk platform yang berbeda, masing-masing sekitar 50KB, di dalam file jbigi.jar. Inisialisasi library JBigI, termasuk identifikasi CPU, seleksi, dan ekstraksi modul loadable yang benar, ditangani oleh NativeBigInteger class . Jika tidak ada modul yang tersedia untuk platform saat ini, library mod_ower JavaI Java Math standar () digunakan.

Membangun kembali dan Menguji JBigI

Berikut ini adalah petunjuk untuk membangun library jbigi baru untuk platform anda dan menguji kinerjanya.

Persyaratan

Ini berfungsi di Linux, dan dengan beberapa perubahan build.sh mungkin juga ada pada platform lainnya. Ini dilaporkan juga berfungsi di FreeBSD. Pada Kaffee, peningkatan kecepatan sangat kecil karena sudah menggunakan native BitInteger secara internal. Blackdown tampaknya menyebabkan kesalahan aneh. Karena anda akan melakukan kompilasi, anda perlu JDK; JRE tidak akan berfungsi.

Kode yang diperlukan tersedia dalam database monoton dan sumber terbaru tarball .

Library GNU MP Bignum (libgmp) perlu diinstal, jika itu tidak disertakan dalam OS / distribusi atau sudah diinstal, itu dapat diambil dari http://gmplib.org/#DOWNLOAD. Bahkan jika anda telah menginstal itu sebagai file biner, itu masih mungkin patut dicoba untuk mengkompilasi GMP, setelah itu, ia akan mampu menggunakan petunjuk khusus prosesor anda. GMP terbaru dapat juga digunakan sebagai pengganti GMP 5.0.2, tapi ini belum diuji oleh kami.

Petunjuk langkah demi langkah

  1. Lihatlah running environment anda di halaman logs.jsp. Harus ada salah satu dari dua status pesan untuk JBigI - bisa Lokal dioptimalkan BigInteger asli diambil dari library path atau Library BigInteger native jbigi tidak dimuat - menggunakan java murni. Jika library BitInteger native TIDAK dimuat, anda pasti perlu untuk mengkompilasi sendiri. Platform tertentu, seperti OS X, OpenSolaris, dan sistem 64-bit, mungkin mengharuskan anda untuk mengkompilasi library anda sendiri. Jika library BigInteger dimuat, lakukan setidaknya langkah selanjutnya untuk melihat kinerja anda.
  2. Lihatlah http://localhost:7657/stats.jsp untuk melihat nilai rata-rata seumur hidup untuk crypto.elGamal.decrypt dan crypto.elGamal.encrypt . Jumlahnya adalah waktu dalam milidetik. Salin ini ke suatu tempat sehingga anda dapat membandingkannya nanti. Rata-rata jaringan untuk mengenkripsi adalah sekitar 20ms. Jika waktu enkripsi anda kurang dari 50ms untuk prosesor yang relatif baru, atau kurang dari 100ms untuk prosesor yang lebih tua, dan library BigInteger native dimuat, anda mungkin baik-baik saja.
  3. Dapatkan kode sumber I2P terbaru dari halaman download , atau dapatkan sumber mutakhir dari database monotone mtn.i2p2.de
  4. Di dalam source tree ubah direktori ke: core/c/jbigi
  5. Baca file README. Jika anda memiliki file /usr/lib/libgmp.so, anda tidak perlu mendownload GMP. Gunakan argumen 'dinamis' untuk build.sh. Jika tidak, anda harus mendownload GMP versi 5.0.2 dari http://gmplib.org/#DOWNLOAD, simpan ke gmp-5.0.2.tar.bz2. Jika anda memutuskan untuk menggunakan versi yang lebih baru, ubahlah VER=line di core/c/jbigi/build.sh .
  6. Lihatlah build.sh , jika JAVA_HOME variabel lingkungan JAVA_HOME anda ditetapkan dan anda menggunakan Linux, maka ini mungkin berfungsi. Jika tidak, ubah pengaturannya. Ingat, anda memerlukan Java SDK.
  7. Jalankan build.sh (jika anda mendownload GMP) atau build.sh dynamic (jika anda memiliki /usr/lib/libgmp.so).
    mungkin build melaporkan beberapa kesalahan file jni.h dan jni_md.h yang hilang. Salin file-file ini dari java install ke direktori inti /c/jbigi/jbigi/include/, atau perbaiki $JAVA_HOME.
    Anda dapat menjalankan build.sh dari direktori core/c/ yang akan membangun semua jbigi libs yang tersedia ke jbigi.jar.
    Sebuah file bernama libjbigi.so harus dibuat di current directory. Jika ini tidak berfungsi dan/atau anda mendapat pesan error, mohon laporkan kepada kami.
  8. Ikuti instruksi di inti /c/README untuk menginstal library dan jalankan tes kecepatan. Baca baris terakhir dari output tes kecepatan untuk beberapa info tambahan, ini akan seperti ini:
    native run time:  5842ms ( 57ms each)
    java run time:   41072ms (406ms each)
    native = 14.223802103622907% of pure java time
    
    Jika yang native memang 5-7x lebih cepat (atau lebih) maka kelihatannya bagus. Jika tidak, mohon laporkan kepada kami.
  9. Salin libjbigi.so ke direktori i2p anda
  10. Restart program I2P anda.
  11. Pada http://localhost:7657/stats.jsp crypto.elGamal.decrypt dan crypto.elGamal.encrypt seharusnya jauh lebih cepat.