{"id":842,"date":"2020-06-18T20:05:31","date_gmt":"2020-06-18T18:05:31","guid":{"rendered":"https:\/\/moijari.com\/?p=842"},"modified":"2020-07-08T23:03:45","modified_gmt":"2020-07-08T21:03:45","slug":"ressu-1-8","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=842","title":{"rendered":"RESSU 1.8"},"content":{"rendered":"\n<p>Ressun edellisess\u00e4 versiossa(1.7) oli ongelma ett\u00e4 my\u00f6s perusriveist\u00e4 laskettiin teoreettisia satunnaisbittej\u00e4. T\u00e4ss\u00e4 pyrit\u00e4\u00e4n laskemaan mukaan ainoastaan poikkeukset s\u00e4\u00e4nn\u00f6st\u00e4. Jos esimerkiksi perusketjut ovat kuuden merkin pituisia, t\u00e4m\u00e4n pit\u00e4isi laskea vain kuudesta poikkeavat ketjut, eli seiskat ja viitoset kuten edellisen postin esimerkiss\u00e4. T\u00e4ll\u00e4 tavoin teoreettisten satunnaisbittien lukum\u00e4\u00e4r\u00e4 on l\u00e4hemp\u00e4n\u00e4 oikeata.<\/p>\n\n\n\n<p>T\u00e4ss\u00e4 varsinainen uusi koodi kokonaisuudessaan, muutetut rivit kuvataan postin lopussa: Kuvaus koodista l\u00f6ytyy edellisest\u00e4 postista <a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/moijari.com\/?p=798\">https:\/\/moijari.com\/?p=798<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void ressu_genbytes(int size, unsigned\n    char *buffer) \/* (c) JariK 2013-2020 v1.8 *\/\n{\n  int c, d, e, f, g,\n    byte, prevbyte,\n    clockbytes = 0, rndbits = 0,\n    chainbytes = 0, oldindex = 0, oldcount;\n  unsigned char olddata&#91;10];\n\n  memset(olddata, 0, sizeof(olddata));\n  prevbyte=clockbyte();\n  f=0;\n\n  for(c=0; c&lt;8 || c%8!=0 ||\n      clockbytes&lt;2000 ||\n      rndbits &lt; 8*size; c++) {\n    for(d=0; d&lt;size; d++) {\n      e = buffer&#91;d];\n      e = ((e&amp;0x80)>>7) | ((e&amp;0x7f)&lt;&lt;1);\n      byte = clockbyte();\n      buffer&#91;d] = e^byte;\n      if(prevbyte != byte) {\n        prevbyte = byte;\n        olddata&#91;oldindex] = chainbytes;\n        oldindex = (oldindex + 1)\n            % sizeof(olddata);\n        oldcount = 0;\n        for(g=0; g &lt; sizeof(olddata); g++) {\n          if(olddata&#91;g] == chainbytes)\n            oldcount++;\n        }\n        if(oldcount &lt; 4)\n          rndbits++;\n\n        clockbytes += chainbytes;\n        chainbytes = 0;\n      } \/\/ if(prevbyte\n      chainbytes++;\n    } \/\/ for(d=0\n    for(d=0; d&lt;size; d++) {\n      f = (f+buffer&#91;d])%size;\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    } \/\/ for(d=0\n  } \/\/ for(c=0\n}<\/code><\/pre>\n\n\n\n<p>Lis\u00e4tyt muuttujat: chainbytes sis\u00e4lt\u00e4\u00e4 t\u00e4m\u00e4n ketjun pituuden, oldindex kertoo, mihin &#8220;positioon&#8221; olddata taulussa seuraava ketjun pituus laitetaan, oldcount kentt\u00e4\u00e4n lasketaan t\u00e4m\u00e4npituisten ketjujen lukum\u00e4\u00e4r\u00e4 ja olddata taulukkoon kirjoitetaan viimeisten kymmenen ketjun pituudet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  int chainbytes = 0, oldindex = 0, oldcount;\n  unsigned char olddata&#91;10];<\/code><\/pre>\n\n\n\n<p>Tyhjennet\u00e4\u00e4n olddata taulukko:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  memset(olddata, 0, sizeof(olddata));<\/code><\/pre>\n\n\n\n<p>Olddata taulussa pidet\u00e4\u00e4n yll\u00e4 kymment\u00e4 viimeist\u00e4 ketjun pituutta, ja t\u00e4ss\u00e4 uusi ketjun pituus lis\u00e4t\u00e4\u00e4n tauluun: Oldindex kent\u00e4n arvoa kasvatetaan aina uuden pituuden lis\u00e4yksen j\u00e4lkeen yhdell\u00e4. Jos oldindex menee ymp\u00e4ri, aloitetaan taas nollasta.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  olddata&#91;oldindex] = chainbytes;\n  oldindex = (oldindex + 1) % sizeof(olddata);<\/code><\/pre>\n\n\n\n<p>Lasketaan kuinka monta edellisen pituista lohkoa taulussa on:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  oldcount = 0;\n  for(g=0; g&lt;sizeof(olddata); g++) {\n    if(olddata&#91;g] == chainbytes)\n      oldcount++;\n  }<\/code><\/pre>\n\n\n\n<p>Lis\u00e4t\u00e4\u00e4n bitti satunnaisuuteen vain jos esiintymi\u00e4 on v\u00e4hemm\u00e4n kuin 4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  if(oldcount &lt; 4)\n    rndbits++;<\/code><\/pre>\n\n\n\n<p>Lis\u00e4t\u00e4\u00e4n t\u00e4m\u00e4n ketjun pituus kokonaispituuteen ja nollataan t\u00e4m\u00e4n ketjun pituus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  clockbytes += chainbytes;\n  chainbytes = 0;<\/code><\/pre>\n\n\n\n<p>Lasketaan t\u00e4m\u00e4n ketjun pituutta.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  chainbytes++;<\/code><\/pre>\n\n\n\n<p>Apuohjelmat ja tarkemman kuvauksen saat tietysti edellisest\u00e4 postista.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ressun edellisess\u00e4 versiossa(1.7) oli ongelma ett\u00e4 my\u00f6s perusriveist\u00e4 laskettiin teoreettisia satunnaisbittej\u00e4. T\u00e4ss\u00e4 pyrit\u00e4\u00e4n laskemaan mukaan ainoastaan poikkeukset s\u00e4\u00e4nn\u00f6st\u00e4. Jos esimerkiksi perusketjut ovat kuuden merkin pituisia, t\u00e4m\u00e4n pit\u00e4isi laskea vain kuudesta poikkeavat ketjut, eli seiskat ja viitoset kuten edellisen postin esimerkiss\u00e4. T\u00e4ll\u00e4 tavoin teoreettisten satunnaisbittien lukum\u00e4\u00e4r\u00e4 on l\u00e4hemp\u00e4n\u00e4 oikeata. T\u00e4ss\u00e4 varsinainen uusi koodi kokonaisuudessaan, muutetut rivit&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=842\">Continue reading <span class=\"screen-reader-text\">RESSU 1.8<\/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\/842"}],"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=842"}],"version-history":[{"count":15,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/842\/revisions"}],"predecessor-version":[{"id":858,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/842\/revisions\/858"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}