{"id":1656,"date":"2021-06-06T12:20:43","date_gmt":"2021-06-06T10:20:43","guid":{"rendered":"https:\/\/moijari.com\/?p=1656"},"modified":"2021-06-08T13:55:18","modified_gmt":"2021-06-08T11:55:18","slug":"ressu-2-0-vaihtoehtoiset-satunnaisuuslahteet","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=1656","title":{"rendered":"Ressu 2.0 Vaihtoehtoiset satunnaisuusl\u00e4hteet"},"content":{"rendered":"\n<p>Lis\u00e4sin muutaman kytkimen newressu-satunnaislukulelun parametreihin. Kytkimill\u00e4 voi valita toisen satunnaislukul\u00e4hteen. &#8211;fast kytkimell\u00e4 valitaan nopea versio ressusta, joka ajaa ressu_genbytes_fast rutiinin kahteen kertaan. &#8211;urandom lukee satunnaisuuden \/dev\/urandom tiedostosta. &#8211;random lukee satunnaisuuden \/dev\/random tiedostosta. Oletuksena \/dev\/random:in k\u00e4ytt\u00f6 on pois p\u00e4\u00e4lt\u00e4 (USE_RANDOM). &#8211;ressu on oletustoiminta, eli k\u00e4ytet\u00e4\u00e4n uutta ressua.<\/p>\n\n\n\n<p>T\u00e4ll\u00e4 ensimm\u00e4isell\u00e4 readfile_xor() rutiinilla luetaan satunnaisuutta \/dev\/*random tiedostoista:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#define aDEBUG9 2\n\nstatic void fort_readfile_xor(int len,\n    unsigned char *buf,\n    unsigned char *filename)\n{\n  int c, n, n2;\n  unsigned char temp&#91;64];\n  FILE *fp1;\n\n  if((fp1 = fopen(filename, \"rb\"))\n      != NULL) {\n    while(len != 0) {\n      n = (len &lt; sizeof(temp)) ?\n          len : sizeof(temp);\n      n2=fread(temp, 1, n, fp1);\n      for(c = 0; c &lt; n2; c++)\n        buf&#91;c] ^= temp&#91;c];\n      len -= n2;\n      buf += n2;\n    }\n    fclose(fp1);\n  }\n}\n<\/code><\/pre>\n\n\n\n<p>Seuraavaksi kokonaan uusittu ressu_genbyte(): input muuttuja m\u00e4\u00e4rittelee satunnaisuuden l\u00e4hteen, 0=ressu, 1=fast ressu, 2=urandom ja 3=random.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int input=0;\n\n#define GENT_SIZE 4096\n#define aUSE_RANDOM 2\n\nint ressu_genbyte()\n{\n  static unsigned char gent&#91;GENT_SIZE];\n  static unsigned char gent_pos=0;\n  unsigned char ch;\n\n  if(input==0) { \/\/ ressu\n    ressu_genbytes(sizeof(ch), &amp;ch);\n  } else {\n    if(gent_pos==0) {\n      if(input==1) { \/\/ ressu_fast\n        ressu_genbytes_fast(sizeof(gent),gent);\n        ressu_genbytes_fast(sizeof(gent),gent);\n      } else if(input==2) { \/\/ urandom\n        readfile_xor(sizeof(gent),gent,\"\/dev\/urandom\");\n#ifdef USE_RANDOM\n      } else if(input==3) { \/\/ random\n        readfile_xor(sizeof(gent),gent,\"\/dev\/random\");\n#endif\n      }\n    }\n    ch=gent&#91;gent_pos];\n    gent_pos=(gent_pos+1)%sizeof(gent);\n  }\n  return(ch);\n}<\/code><\/pre>\n\n\n\n<p>Seuraavassa uudet rivit main():in parametrien k\u00e4sittelyss\u00e4: mukana pari edelt\u00e4v\u00e4\u00e4 ja pari seuraavaa rivi\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      } else if(!strncmp(\"-i\",argv&#91;c],2)) {\n        digits=NULL;\n        if(*(argv&#91;c]+2)!='\\0') {\n          digits=argv&#91;c]+2;\n        } else if(c+1 &lt; argc) {\n          digits=argv&#91;c+1];\n          c++;\n        }\n        if(digits==NULL || utf8len(digits)&lt;2) {\n          fprintf(stderr,\"%s: not enough digits \\\"%s\\\"\\n\",procname,argv&#91;c]);\n          help = 1;\n        }\n        size=1;\n      } else if(!strcmp(\"--ressu\",argv&#91;c])) {\n        input=0;\n      } else if(!strcmp(\"--fast\",argv&#91;c])) {\n        input=1;\n      } else if(!strcmp(\"--urandom\",argv&#91;c])) {\n        input=2;\n#ifdef USE_RANDOM\n      } else if(!strcmp(\"--random\",argv&#91;c])) {\n        input=3;\n#endif\n      } else {\n        fprintf(stderr,\"%s: invalid option %s\\n\",procname,argv&#91;c]);\n        help = 1;\n      }\n<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lis\u00e4sin muutaman kytkimen newressu-satunnaislukulelun parametreihin. Kytkimill\u00e4 voi valita toisen satunnaislukul\u00e4hteen. &#8211;fast kytkimell\u00e4 valitaan nopea versio ressusta, joka ajaa ressu_genbytes_fast rutiinin kahteen kertaan. &#8211;urandom lukee satunnaisuuden \/dev\/urandom tiedostosta. &#8211;random lukee satunnaisuuden \/dev\/random tiedostosta. Oletuksena \/dev\/random:in k\u00e4ytt\u00f6 on pois p\u00e4\u00e4lt\u00e4 (USE_RANDOM). &#8211;ressu on oletustoiminta, eli k\u00e4ytet\u00e4\u00e4n uutta ressua. T\u00e4ll\u00e4 ensimm\u00e4isell\u00e4 readfile_xor() rutiinilla luetaan satunnaisuutta \/dev\/*random tiedostoista: Seuraavaksi&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=1656\">Continue reading <span class=\"screen-reader-text\">Ressu 2.0 Vaihtoehtoiset satunnaisuusl\u00e4hteet<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6,11],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1656"}],"collection":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1656"}],"version-history":[{"count":4,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1656\/revisions"}],"predecessor-version":[{"id":1673,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1656\/revisions\/1673"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}