
On 6 April 2010 10:55, Rob Riggs <rob@pangalactic.org> wrote:
This is also the scheme used by crypto++ (C++), the Perl API, PyCrypto (Python) and openssl (C). I think the Boost crypto hash API should more closely mimic the existing de facto standard interfaces as much as possible.
Thanks for the references. They're not completely consistent, though.
From Python: "digest(): Return the hash value of this hashing object, as a string containing 8-bit data. The object is not altered in any way by this function; you can continue updating the object after calling this function."
From Java6: "The digest method can be called once for a given number of updates. After digest has been called, the MessageDigest object is reset to its initialized state."
I do like the idea that digest() be const, since conceptually it's just inspecting the result of the previous updates. Here's a hybrid idea, with definitions to show equivalences: class hash { public: void update(byte); void reset() { *this = hash(); } digest_type digest() const { return hash(*this).end_of_message(); } digest_type end_message() { digest_type h = digest(); reset(); return h; } }; That way it provides for rolling or message-oriented digests, and adapts for the other as best it can if needed. Is that a reasonable compromise? ~ Scott P.S. Interestingly, with 64-bit processors, SHA-512 is faster for me than SHA-1.