Here's a first proposal for the API: http://dl.dropbox.com/u/24218791/d/src/digest.html
One open question is: What should we do if a too small buffer is passed to the finish function (in the OOP API)? Should we check for the length only in debug(assert) or in debug+release mode (enforce) or should we use the tango way and silently allocate? And another question: Can Digest.length be pure (for all digests)?
