Fort: Hashaamalla satunnaisuutta newressu komennon tulosteesta

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…