@fthomas You have the right idea I think, of trying to allocate the digest within the process, so you get a fresh one for each time the process is run. I think the only issue is that you are using `emitLazy`, which will memoize the resulting `MessageDigest`. Try using:

```Scala
/** 
  * Produce the given `Process1` non-strictly. This function is useful
  * if a `Process1` has to allocate any local mutable state for each use, and
  * doesn't want to share this state.
  */
def suspend1[A,B](p: => Process1[A,B]): Process1[A,B] = 
  await1[A].flatMap(a => process1.feed1(a)(p))
```

Then just do:

```Scala
suspend1 { 
  val digest = MessageDigest.getInstance(algorithm)
  go(digest)
}
```