<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 7, 2020 at 9:07 PM Rob Landley <<a href="mailto:rob@landley.net">rob@landley.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 12/7/20 10:52 PM, Rob Landley wrote:<br>
> Hmmm, this is producing a LOT more capital letters than the other version, which<br>
> also falls under "human readable affordance". let's see... Top bit of entropy<br>
> per byte isn't really used, so I'll squelch capitals when it's set. (That should<br>
> make 1/4 of letters capital.)<br>
...<br>
> That's still a very different character distribution. He's squelching more<br>
> capitals than I am, and at least half the punctuation...<br>
<br>
Forgot to mention I used the same high bit squelch trick to suppress half the<br>
punctuation. The result still has more punctuation on average yet isn't<br>
guaranteed to have punctuation in EACH generated password, but...<br>
<br>
> Which is... eh? Close enough?<br>
<br>
Checked in the cleanup, and promoted it to toys/other.<br>
<br>
I note that -s isn't hooked up to anything. Maybe I should make it disable the<br>
two squelches? Yeah, I'll do that...<br></blockquote><div><br></div><div>i think that the toybox implementation is effectively "always -s" because it's just using random characters, and not doing the "pronounceable" bit. try reading out your own example:</div><div><br></div><div>$ pwgen -y<br>Eegae:B9 pee3Boh{ Hie~j3Lu aew)a3Jo zae'Cho5 quah!Ph5 EJa(X5Ee zui7Aez)<br>Too2Ed)o kap.ae4L ahj$i8Se Aile-ch4 nah+w3Ea wa"Zo9ea Shu4dae+ tuNg]u7e<br>giY!oc9o duG5eiz- sahc7eS* ooPi@z0e eX7nei_d iV/ae1se eiQu4om^ Ni>pig1o<br><br>and then try to read the toybox ones out instead:<br><br>$ toybox pwgen -y<br>p:Q1$h=C h6W`ieZ< Q`o!b|+) 1apBp}nT er@7mKgi waAqC[7i v<y\:jzt [#o=Nw7w<br>tx1^1Uo[ o`B]y84{ wjdsl>%n R=<h[*0" #m*+(z!( qbZf,3h) fs&oc1C0 `?#-sstC<br>r`mR{ht{ i%g'FA$> ofy=#t}7 rCRWEmlq 7A;/`|}= rvqv|swe wT\z-(sw ,Cr*y6c.<br></div><div><br></div><div>i suspect the real thing is meant to be something more likeĀ <a href="https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub181.pdf">https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub181.pdf</a> ?</div><div><br></div><div>the interesting bit seems to be:</div><div><br></div><div>/*</div><div>* Generate next unit to password, making sure that it follows<br>* these rules:<br>* 1. Each syllable must contain exactly 1 or 2 consecutive<br>* vowels, where y is considered a vowel.<br>* 2. Syllable end is determined as follows:<br>* a. Vowel is generated and previous unit is a<br>* consonant and syllable already has a vowel. In<br>* this case, new syllable is started and already<br>* contains a vowel.<br>* b. A pair determined to be a "break' pair is encountered.<br>* In this case new syllable is started with second unit<br>* of this pair.<br>* c. End of password is encountered.<br>* d. "begin" pair is encountered legally. New syllable is<br>* started with this pair.<br>* e. "end" pair is legally encountered. New syllable has<br>* nothing yet.<br>* 3. Try generating another unit if:<br>* a. third consecutive vowel and not y.<br>* b. "break" pair generated but no vowel yet in current<br>* or previous 2 units are "not_end .<br>* c. "begin" pair generated but no vowel in syllable<br>* preceding begin pair, or both previous 2 pairs are<br>* designated "not_end".<br>* d. "end" pair generated but no vowel in current syllable<br>* or in "end" pair.<br>* e. "not_begin" pair generated but new syllable must<br>* begin (because previous syllable ended as defined in<br>* 2 above).<br>* f. vowel is generated and 2a is satisfied, but no syllable<br></div><div>* break is possible in previous 3 pairs.</div><div>* g. Second and third units of syllable must begin, and</div><div>* first unit is "altemate_vowel".<br></div><div>*/</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
And yes, I should rename janice[]. When I'm tired all the names I choose for<br>
things tend to be pop culture references, I.E. my first answer to the question<br>
raised by its name, ala what should I call the ps -o fields? "struct<br>
strawberry". In this case the question was "which rand" since "int rand;" was<br>
already the index into the buffer of random numbers returned by xgetrandom()<br>
when I yanked toybuf out from under it to construct the password into, so I<br>
needed a new buffer to hold random data and the obvious answer was the star trek<br>
character. (Could have gone with the old NSA front corporation but... no.)<br>
<br>
The question I SHOULD be answering for these names is "what will be easiest for<br>
other people to understand", and I usually go back and replace them later.<br>
<br>
And yes sizeof(janice) was an issue because more system calls is bad (it's slow<br>
and I'm never 100% sure there isn't some ptrace exploit for some subtle side<br>
channel attack or data exfiltration or something), but draining the entropy<br>
buffer more than necessary is bad. So I compromised at twice the default<br>
password size, not _entirely_ arbitrarily because I vaguely remembered something<br>
about the internal kernel hash plumbing that implements /dev/urandom working in<br>
block sizes bigger than 64 bits (8 bytes), so the kernel's doing the work to<br>
prepare at least much buffer each time even when it mixes those bits back in<br>
because it didn't send them to userspace. (I'm using urandom which doesn't do<br>
the "we're out of REAL entropy, block until more comes in" accounting, but it's<br>
still not a good idea to waste it. I _could_ look up what the current hash<br>
granularity is for whatever they've redone the plumbing to this year, but it<br>
would only change again and being asked for one 8 character password is just<br>
enough of a common case (pwgen -1) that fetching twice that much seemed the most<br>
I could excuse anyway. Hand wave, hand wave, jazzhands.)<br>
<br>
Rob<br>
_______________________________________________<br>
Toybox mailing list<br>
<a href="mailto:Toybox@lists.landley.net" target="_blank">Toybox@lists.landley.net</a><br>
<a href="http://lists.landley.net/listinfo.cgi/toybox-landley.net" rel="noreferrer" target="_blank">http://lists.landley.net/listinfo.cgi/toybox-landley.net</a><br>
</blockquote></div></div>