Warning
UPDATE: Vo verzii 0.2.1 su updatovane všetky Rust knižnice použité v tomto projekte.
DLLs: DLL knižnice v adresári CBlake3_cli_64bit/testprogram/ a CBlake3_cli_32bit/testprogram/ sú pregenerované (vyuzivaju Blake3 v1.5.1).
Jednoduchá CLI aplikácia napísaná v jazyku C, ktorá vrácia odtlačok (hašovací kód) hašovacej funkcie Blake3. Aplikácia využíva optimalizovanú a paralizovateľnú implementáciu hašovacej funkcie Blake3, ktorá je napísaná v jazyku Rust. Mapovanie Rust kódu s jazykom C (viď. zdrojový kód v adresári CBlake3_cli_64bit/src resp. CBlake3_cli_32bit/src) umožnuje vytvoriť DLL knižnicu, ktorá je využitá práve v C kóde.
Poznámka: zdrojové kódy pre adresáre CBlake3_cli_64bit a CBlake3_cli_32bit sú prakticky totožné, líšia sa len zložkou .cargo (pridané v CBlake3_cli_32bit) viď. docs.pdf.
- CLI aplikácia sa nachádza v adresári
CBlake3_cli_64bit/testprogram/pre 64-bitovú platformu aleboCBlake3_cli_32bit/testprogram/pre 32-bitovú platformu (OS Winodws). - Aplikáciu je potrebné preložiť pomocou batch súboru
preklad.bat(vhodné pre OS windows). Po úspešnom preklade sa vygeneruje spustiteľný súbor Blake3cli.exe. - Spustenie aplikácie:
Blake3cli.exe -f test3.txt -t 8(-f je prepínač pre cestu k súboru, -t je prepínač na počet vlákien | poradie prepínačov je možné zameniť). - Napísal som aj jednoduchý help výpis ktorý je možné spustiť napr. príkazom
Blake3cli.exe -help.
Viac informácií ohľadom projektu CBlake3_cli (ako napríklad opis princípu mapovanie jazyka Rust s jazykom C) je možné nájsť v stručnej dokumentácii (docs.pdf).
- CBlake3_cli je od verzie 0.1.1 schopný hašhovať nie len súbory ale aj reťazce (String).
Ak zadáme neplatnú cestu pre súbor, kt. chceme hašovať, tak CBlake3_cli túto neplatnú cestu
automatický vyhodnotí ako dáta.
Príklad: (hashovanie súboru)
valid filepath:
test2.txtpríkaz:
Blake3cli.exe -f test2.txt -t 8* zahašuje súbor
Príklad: (hashovanie reťazca č.1)
invalid filepath:
tento_subor_neexistuje.txtpríkaz:
Blake3cli.exe -f tento_subor_neexistuje.txt -t 8* zahašuje retazec
Príklad: (hashovanie reťazca č.2)
retazec:
vstupný reťazec,kt. chcem hašhovatpríkaz:
Blake3cli.exe -f "vstupný reťazec,kt. chcem hašhovat" -t 8* zahašuje retazec
Príklad: (hashovanie reťazca v C kóde)
#include <stdio.h> #include "headers/mycrate.h" // import hlavickovych suborov int main(){ char *myString = "Hello World!"; // data na hasovanie int threads = 8; // pocet vlákien const MyString *Blake3Hash = Blake3C(threads,myString);// hašovanie const char *blake3_hash_code= Blake3Hash->hash_code; float hash_time = Blake3Hash->hash_time; printf("Blake3 hash: %s\nTime:%f sec\n",blake3_hash_code,hash_time); free_Blake3C(Blake3Hash); // uvolnenie pamäte return (0); }*Overiť hašovací kód je možné na tejto linke.
-
Verzia 0.1.1 prináša omnoho menšie DLL knižnice. Zmenšenie veľkosti DLL knižníc je dosiahnuté konfiguraciou Cargo projektu (viac v Cargo.toml).
Zmena veľkosti 32-bit. DLL knižnice:
Pôvodná veľkosť (~4700kB) -> Aktuálna veľoksť (~420kB)
Zmena veľkosti 64-bit. DLL knižnice:
Pôvodná veľkosť (~4900kB) -> Aktuálna veľoksť (~360kB)
-
Hašovanie súborov. V pôvodnej verzii sa pri hašovaní veľkých súborov správal program nepredvídateľne a častokrát "padal". Príčinou toho bolo preťaženie pamäte RAM, pretože pri hašovaní sa súbor načítal do pamäte celý. Od verzie 0.1.1 sa súbor načitáva do pamäte po blokoch o veľkosti 65536 B, čo by malo zabrániť "padaniu" programu. Nevýhodou je dlhší čas hašovania súboru. Veľkosť bloku, ktorý slúži ako buffer pri čítani súboru je fixne nastavený na hodnotu 65536 B, pričom túto veľkosť môžeme manuálne zmeniť (viď. funkcia read_buffered_and_hash_from_file), hoci sa to neodporúča.
Hašovanie reťazcov nepodlieha buffrovaniu, a teda reťazec sa pri hašovaní načíta do pamäte celý.
Následujúca verzia CBlake3_cli by mala vyriešiť problém s chybovými správami (error msg), ktoré budú vypísané na výstup.
Taktiež možnosť si zvoliť načítanie celého súboru do RAM pamäte (zvýšenie rýchlosti hašovania) alebo čítať súbor po blokoch (zabráni potencionálnemu padaniu programu).
Výslednú DLL knižnicu je možné explicitne zmenšiť o ~100kB, stačí "povedať Rustu", aby za ním upratal OS (toto nastavenie je možné využiť pokiaľ užívateľ "vie čo robí"):
Viac v sekcii Unwinding the Stack or Aborting in Response to a Panic
Stači pridať týchto pár riadkov do Cargo.toml (napr. pod sekciu [build-dependencies]):
[profile.release]
panic = 'abort'