good example of how a merge can have no conflicts yet neverthless
require a bunch of adjustments to got something that actually works.
these two changes are conceptually independent but since shrink-buf
changes the internal representation of a digest, the shake code needs to
be adjusted to match. i wanted to capture the code both before and
after the shrink-buf change, thus this merge.
there's a bunch of code duplication that i will clean up later.