Prezentare generală
Folosind JNI (Java Native Interface), un pic de cod C (datorită ugha!), Un pic lucru manual și o bucată de gumă de mestecat si le-am făcut mai multe operațiuni criptografice un pic mai repede.
Accelerare vine de la bibliotecă super-rapid GNU MP Bignum (libgmp) a>. Noi folosim o singură funcție de libgmp - mpz_powm () a> ca un înlocuitor pentru Java Math bibliotecii BigInteger modPow () a>. Ca modPow () este o porțiune de calcul semnificativă a multor operațiuni criptografice, acest lucru este deosebit de benefic.
Instalarea standarda I2P include aproximativ 20 de versiuni ale bibliotecii pentru diferite platforme, fiecare aproximativ 50KB, în interiorul fișierul jbigi.jar. Inițializarea bibliotecii JBigI, inclusiv identificarea CPU, selecție, și extracție modulului de încărcare corecta, este manipulat de către clasă NativeBigInteger a>. Dacă modul nu este disponibil pentru platforma actuală, este utilizat standardul Java Math bibliotecii BigInteger modPow () a> .
Reconstruirea și testare JBigI
În urma sunt instructiunile pentru a construirea și testarea performanțelor bibliotecii jbigi pentru propria platforma.Cerințe
Aceasta funcționează pe Linux, și cu câteva modificări în build.sh, probabil, de asemenea, cu privire la alte platforme. A fost, de asemenea, raportat lucru pe platforma FreeBSD. Pe Kaffee accelerare este foarte mica, deoarece foloseste deja BitInteger nativ pe plan intern. Blackdown pare a provoca erori ciudate. Daca aveți de gând să faci compilare, aveți nevoie de JDK, JRE nu va funcționa.
Codul necesar este disponibil în baza de date monoton și cele mai recente pachete cu sursa.
Biblioteca GNU MP Bignum (libgmp) trebuie să fie instalata, în cazul în care acesta nu este incluse în OS / distribuție sau instalat deja, acesta poate fi primit de la http://gmplib.org/#DOWNLOAD a>. Chiar dacă l-au instalat deja ca binar, ar putea fi încă în valoare de o încercare de a compila GMP-te, deoarece atunci se va putea folosi instrucțiunile specifice ale procesorul. Cel mai recent GMP poate, de asemenea, fi utilizate în locul GMP 5.0.2, dar acesta nu a fost testat de către noi.
Instrucțiuni Pas-cu-pas
- Uită-te la mediu de pornire pe pagina logs.jsp a>. Nu ar trebui să fie una dintre cele două mesaje de stare pentru JBigI - fie BigInteger nativ optimizat la nivel local încărcat de la calea bibliotecă sau BigInteger nativ biblioteca jbigi nu sunt încărcate - folosirea Java pur. Dacă biblioteca nativa BitInteger nu a fost încărcată, cu siguranta ai nevoie pentru a compila propria biblioteca. Anumite platforme, cum ar fi OS X, OpenSolaris, și sistemele pe 64 de biți, vă pot solicita să compilați propria biblioteca. Dacă biblioteca BigInteger a fost încărcata, faceti cel puțin următorul pas pentru a vedea care performanța este.
- Uită-te la http://localhost:7657/stats.jsp a>
pentru a vedea valorile medii de viață pentru
crypto.elGamal.decrypt code> și
crypto.elGamal.encrypt code> . Numerele sunt momente în milisecunde. Copiați aceste undeva astfel încât să puteți compara mai târziu. Media de rețea de timpul criptarii este de aproximativ 20ms. Dacă timpul dvs. de criptare este mai mic de 50ms pentru un procesor relativ nou , sau mai puțin de 100ms pentru un procesor mai vechi, și biblioteca BigInteger nativ este incarcata, valorile sunt bune .
- Obțineți cele mai recente cod-sursă eliberat de I2P de la pagina de descărcare a>, sau de a lua sursa de ultimă oră din mtn.i2p2.de bazei de data monoton
- În interiorul copacului sursă schimbati directorul :
core / c / jbigi code>
- Citiți fișierul README.
Dacă aveți un / usr / lib / libgmp.so fișier, nu trebuie să descărcați GMP.
Utilizați argumentul "dinamic", a build.sh.
În caz contrar, trebuie să descărcați GMP versiunea 5.0.2 de la
de la http://gmplib.org/ # DOWNLOAD a>, salvându-l ca GMP-5.0.2.tar.bz2.
Dacă vă decideți să utilizați o versiune mai nouă, schimba VER = linie în
core / c / jbigi / build.sh code>.
- Aruncati o privire la
build.sh code>, în cazul în care variabilă de mediu
JAVA_HOME code> este setata și utilizați Linux, atunci s-ar putea funcționa. Schimba altfel setările. Amintiți-vă, ca aveți nevoie de Java SDK instalat.
- Rulați
build.sh code> (dacă ați descărcat GMP) sau
build.sh dinamic code> (dacă aveți / usr / lib / libgmp.so).
Poate construirea a aruncat unele erori de lipsă jni.h și fișiere jni_md.h. Copiati aceste fișiere din directoriul de instalare a java dvs. / c / jbigi / jbigi / include / directory, sau reparati $JAVA_HOME.
Puteți rulabuild.sh code> din
core / c / code> director care va construi toate biblioteci jbigi disponibile într-o jbigi.jar. br> Un fișier numit
libjbigi.so code> ar trebui să fie creat în director curent. Dacă acest lucru nu se întâmplă și / sau veți obține erori, vă rugăm să raportati ele.
- Urmați instrucțiunile din bază / c / README pentru a instala biblioteca și a trece testul de viteză. Citiți liniile finale ale rezultatului testului de viteză pentru unele info suplimentare, acesta va fi ceva de genul:
native run time: 5842ms ( 57ms each) java run time: 41072ms (406ms each) native = 14.223802103622907% of pure java time
În cazul în care nativul este într-adevăr de 5-7x mai rapid (sau mai mult), atunci se pare totul bine. Dacă nu, vă rugăm să raportați.- Copie
libjbigi.so code> in directorul I2P
- Reporniți programele I2P.
- Pe http://localhost:7657/stats.jsp
crypto.elGamal.decrypt
sicrypto.elGamal.encrypt
ar trebui să fie mult mai repede. - Aruncati o privire la