Parissa edellisessä postissa olen esitellyt uuden ressun ja siihen liittyvän lelusovelluksen newressu. Tässä postissa käytetään newressun satunnaisuutta fort:in avainnukseen.
Ensimmäisellä rutiinilla ajetaan komento (parametreineen), ja hashataan sen tulos: funktio popen suorittaa komennon ja palauttaa osoitteen (fp1) sen tulosteeseen. Komennon tulostetta luetaan fread:illa. Alussa on hashattavaan materiaaliin lisätty cvar, jolla voidaan varmistaa että “tulostetta säätämällä” ei voida saada tiettyä hash-koodia. Oletuksena cvar hash:ääminen on kommenteissa.
#define FORT_USE_NEWRESSU_COMMAND 2
#ifdef FORT_USE_NEWRESSU_COMMAND
void fort_hash_command(unsigned char *command, unsigned char *hash)
{
int c,length;
FILE *fp1;
unsigned char buffer[64];
HashCtx hashctx;
length=0;
if((fp1=popen(command, "r"))!=NULL) {
HashInit(&hashctx);
//HashUpdate(&hashctx, (unsigned char *)&cvar,sizeof(cvar));
//inccvar();
fprintf(stdout,"fort_hash_command: %s",command);
fflush(stdout);
while((c=fread(buffer,1,sizeof(buffer),fp1))>0) {
//fwrite(buffer,1,c,stdout);
HashUpdate(&hashctx, buffer, c);
length+=c;
}
pclose(fp1);
fprintf(stdout,", %d bytes read",length);
HashFinal(hash, &hashctx);
fprintf(stdout,", sha256: ");
for(int c = 0;c < HashLen; c++) {
fprintf(stdout,"%02x", hash[c]);
}
fprintf(stdout,"\n");
fflush(stdout);
}
}
Seuraavassa fort:initissä oleva funktiokutsu (fort_hash_command) aiemman web sivusta satunnaisuutta poimivan toiminnon jälkeen: Newressu komennossa -2:lla määritellään haluttu merkistö ( tässä sama kun web satunnaisbittisivustoissani (esimerkiksi https://moijari.com:5006) on), -s16 kertoo “sanan” koon (tässä 16 merkkiä), -w8 tulostetaan 8 sanaa riville, -l640 tulostetaan 640 riviä, –space tulostetaan välilyönnit sanojen väliin, –lineno ei tulosteta rivinumeroita. Tuloste on säädetty saman oloiseksi noiden muiden satunnaislukusivujeni kanssa.
#ifdef FORT_USE_MOIJARICOM5005
fort_hash_https_page("moijari.com", "5005", "/", hash);
fort_reseed(sizeof(hash), hash);
dump_pools("Rand. from moijari.com:5005");
#endif
#ifdef FORT_USE_NEWRESSU_COMMAND
fort_hash_command("/bin/newressu -2 -s16 -w8 -l640 --space --lineno", hash);
fort_reseed(sizeof(hash), hash);
dump_pools("Rand. from newressu");
#endif
Merkkien määrä tulosteessa on tietenkin yliampuva, kuten se on aina näissä satunnaissivuissani ollut…