Something to consider for the future is that the use of proprietary eumeration constants in the API for specifying signature and digest algorithms makes application code on top of this very brittle in terms of handling future evolution.
It would be better to let dependent code use the URI strings when passing in or returning the algorithms, and handle any shorthand notation you want internally to the code. Looking at this new version, if I want to extend support for more than just SHA1 and MD5, I think I have to both conditionally allow for the newer algorithms at compile time, and I can't easily handle future algorithms by way of a configuration file because I wouldn't know what constant to pass into the library. Sorry for not bringing this up before, I hadn't really tried to add support for multiple algorithms in my code until now. -- Scott