sha_digest is a C implementation of the Secure Hashing Algorithms SHA-1, SHA-224, SHA-256, SHA-384 and SHA512 as described in FIPS PUB 180-3, published in October 2008, and described in
FIPS 180-3: http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf
You can either use the result as a library to be linked against your programs, thus supplying all the above hashing algorithms, or you can directly use the source files implementing one or more of these algorithms within your programs.
The implementation is written in (hopefully) standard compliant C (ANSI C89), thread-safe, and should work independently of the underlying hardware (i.e. it should run on e.g. 32-bit systems as well as 64-bit or even 128-bit systems etc.) or the operating system used.
While I implemented the SHA algorithms as good as my abilities and understanding of the standard cited above allow I'm not claiming at all that the implementations are error free. Thus if you intend to use them, especially for use in cryptographic applications, you de- finitely must review and test the code carefully yourself!
· In principle all the hashing algorithms listed above are supposed to work on arbitrary numbers of bits as input (within the limits outlined in the standard, i.e. up to (2^64 - 1) bits for SHA-1, SHA-224 and SHA-256, and (2^128 - 1) bits for SHA-384 and SHA-512). This is not the case for this implementation: it only can handle messages with numbers of bits that are integer multiples of 8.
· On systems where a char has more than 8 bits (i.e. CHAR_BIT > 8) then only the lowest 8 bits of each byte of the data passed to the appropriate function for hashing will be taken into account, higher order bits simply are discarded.
· Due to trying to be platform-agnostic this implementations might be a bit slower than those that can make assumptions about the availability of certain types of unsigned integers (which are heavily used in these algorithms) or the endianess.