| /* |
| * sha1.h |
| * |
| * Copyright (C) 1998, 2009 |
| * Paul E. Jones <paulej@packetizer.com> |
| * All Rights Reserved. |
| * |
| ***************************************************************************** |
| * $Id: 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 sha1.cpp for more information. |
| * |
| */ |
| |
| #ifndef _SHA1_H_ |
| #define _SHA1_H_ |
| |
| 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? |
| |
| }; |
| |
| #endif |