Özet
JNI (Java Native Interface), biraz C kodu (teşekkürler ugha!), biraz el emeği ve bir parça sakız kullanarak birkaç şifreleme işlemini biraz daha hızlı hale getirdik.
Hızlanma, süper hızlı GNU MP Bignum kitaplığından (libgmp) gelir. Java Math kitaplığı BigInteger modPow() yerine libgmp - mpz_powm() içinden tek bir işlev kullanıyoruz. modPow() birçok şifreleme işleminin önemli bir hesaplama kısmı olduğundan, bu önemli bir faydadır.
Standart I2P kurulumu, jbigi.jar dosyasının içinde her biri yaklaşık 50 KB olan farklı platformlar için kitaplığın yaklaşık 20 sürümünü içerir. İşlemcinin belirlenmesi, seçimi ve doğru yüklenebilir modülün ayıklanması ile JBigI kitaplığının başlatılması, NativeBigInteger class tarafından gerçekleştirilir. Var olan platform için herhangi bir modül yoksa, standart Java Math kitaplığı BigInteger modPow() kullanılır.
JBigI yeniden oluşturma ve sınama
Aşağıda, kendi platformunuz için yeni bir jbigi kitaplığı oluşturma ve başarımını sınama yönergelerini bulabilirsiniz.Gereksinimler
Bu, Linux üzerinde çalışır ve build.sh dosyasındaki birkaç değişiklikle diğer platformlarda da çalışabilir. FreeBSD üzerinde çalıştığı bildirildi. Kaffee üzerinde hızlanma çok küçüktür. Çünkü zaten içinde yerel BitInteger kullanır. Blackdown, garip hatalara neden oluyor gibi görünüyor. Derleme yapacağınız için JDK gereklidir, JRE çalışmaz.
Gerekli kod monoton veri tabanında ve en son kaynak paketinde bulunur.
İşletim sisteminizde ya da dağıtımızınızda bulunmuyorsa, GNU MP Bignum kitaplığının (libgmp) kurulması gerekir. http://gmplib.org/#DOWNLOAD adresinden alınabilir. Binary olarak kurmuş olsanız bile, GMP paketini kendinizin derlemesi denemeye değer olabilir. Bu durumda işlemcinizin özel komutları kullanılabilir. GMP 5.0.2 yerine son GMP sürümü de kullanılabilir, ancak tarafımızdan denenmemiştir.
Adım adım yönergeler
- logs.jsp sayfasından çalışan ortamınıza bakın. JBigI için iki durum iletisinden biri görüntülenmedir. Ya Kitaplık yolundan yüklenen iyileştirilmiş yerel BigInteger ya da Yerel BigInteger kitaplığı jbigi yüklü değil - saf java kullanarak. Yerel BitInteger kitaplığı YÜKLENMEDİYSE, kesinlikle kendi derlemenizi yapın. OS X, OpenSolaris ve 64 bit sistemler gibi belirli platformlar için kendi kitaplığınızı derlemeniz gerekebilir. BigInteger kitaplığı yüklendiyse, başarımınızın nasıl olduğunu görmek için en azından bir sonraki adımı uygulayın.
crypto.elGamal.decrypt
vecrypto.elGamal.encrypt
için yaşam boyu ortalama değerlerin ne olduğunu http://localhost:7657/stats.jsp adresinden görebilirsiniz. Sayılar milisaniye cinsindendir. Bunları daha sonra karşılaştırabilmek için bir yere kopyalayın. Şifreleme süresi için ağ ortalaması yaklaşık 20 milisaniyedir. Şifreleme süreniz nispeten yeni bir işlemci için 50 milisaniyeden, daha eski bir işlemci için 100 milisaniyeden düşükse ve yerel BigInteger kitaplığı yüklendiyse, sorun olmaması gerekir.- İndirme sayfasından güncel I2P kaynak kodunu alın veya monoton veri tabanının güncel kaynak kodunu mtn.i2p2.de üzerinden alın
- Kaynak ağacında şu klasöre gidin:
core/c/jbigi
- README dosyasını okuyun.
Bir /usr/lib/libgmp.so dosyanız varsa, GMP indirmeniz gerekmez.
build.sh ile 'dynamic' argümanını kullanın.
Yoksa, http://gmplib.org/#DOWNLOAD adresinden GMP 5.0.2 sürümünü
indirmeniz ve gmp-5.0.2.tar.bz2 olarak kaydetmeniz gerekir. Daha yeni bir sürüm
kullanmaya karar verirseniz,
core/c/jbigi/build.sh
dosyasındaki VER= satırını değiştirin. JAVA_HOME
ortam değişkeniniz ayarlanmışsa ve Linux kullanıyorsanızbuild.sh
dosyasına bir göz atmanız işe yarayabilir. Olmuyorsa ayarları değiştirin. Unutmayın, Java SDK yazılımını yüklemeniz gerekir.build.sh
(GMP indirdiyseniz) veyabuild.sh dynamic
(elinizde /usr/lib/libgmp.so varsa) komutunu yürütün.
Derleme, eksik jni.h ve jni_md.h dosyalarının bazı hatalarını yaymış olabilir. Bu dosyaları Java kurulumunuzdan core/c/jbigi/jbigi/include/ klasörüne kopyalayın ya da $JAVA_HOME değerini düzeltin.
build.sh
komutunucore/c/
klasöründen çalıştırabilirsiniz. Böylece var olan tüm jbigi kitaplıkları bir jbigi.jar içine toplanır. Geçerli klasördelibjbigi.so
adlı bir dosya oluşturulmalıdır. Bu olmazsa ve/veya hata iletisi alırsanız lütfen bunları bildirin.- Kitaplığı kurmak ve hız sınamasını yapmak için core/c/README içindeki
yönergeleri izleyin. Bazı ek bilgiler için hız sınamasının çıktısının son
satırlarını okuyun. Şuna benzer bir şey olacaktır:
native run time: 5842ms ( 57ms each) java run time: 41072ms (406ms each) native = 14.223802103622907% of pure java time
Doğal, gerçekten 5-7 kat veya (daha fazla) hızlıysa her şey yolunda görünüyor. Değilse, lütfen bildirin. libjbigi.so
dosyasını i2p klasörünüze kopyalayın- I2P programlarınızı yeniden başlatın.
- http://localhost:7657/stats.jsp üzerinde
crypto.elGamal.decrypt
vecrypto.elGamal.encrypt
çok daha hızlı olmalıdır.