/* * fhicl-sha1.h * * Copyright (C) 1998, 2009 * Paul E. Jones * All Rights Reserved. * ***************************************************************************** * $Id: fhicl-sha1.h 12 2009-06-22 19:34:25Z paulej $ ***************************************************************************** * * Description: * This class implements the Secure Hashing Standard as defined * in FIPS PUB 180-1 published April 17, 1995. * * Many of the variable names in this class, especially the single * character names, were used because those were the names used * in the publication. * * Please read the file fhicl-sha1.cpp for more information. * */ #ifndef _SHA1_H_ #define _SHA1_H_ namespace fhicl { class SHA1 { public: SHA1(); virtual ~SHA1(); /* * Re-initialize the class */ void Reset(); /* * Returns the message digest */ bool Result(unsigned *message_digest_array); /* * Provide input to SHA1 */ void Input( const unsigned char *message_array, unsigned length); void Input( const char *message_array, unsigned length); void Input(unsigned char message_element); void Input(char message_element); SHA1& operator<<(const char *message_array); SHA1& operator<<(const unsigned char *message_array); SHA1& operator<<(const char message_element); SHA1& operator<<(const unsigned char message_element); private: /* * Process the next 512 bits of the message */ void ProcessMessageBlock(); /* * Pads the current message block to 512 bits */ void PadMessage(); /* * Performs a circular left shift operation */ inline unsigned CircularShift(int bits, unsigned word); unsigned H[5]; // Message digest buffers unsigned Length_Low; // Message length in bits unsigned Length_High; // Message length in bits unsigned char Message_Block[64]; // 512-bit message blocks int Message_Block_Index; // Index into message block array bool Computed; // Is the digest computed? bool Corrupted; // Is the message digest corruped? }; } // end of namespace mf #endif