Starshatter_Open
Open source Starshatter engine
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Sha1.h
Go to the documentation of this file.
1 /*
2 * Sha1.h
3 *
4 * Copyright (C) 1998
5 * Paul E. Jones <paulej@acm.org>
6 * All Rights Reserved.
7 *
8 *****************************************************************************
9 * $Id: sha1.h,v 1.4 2001/03/20 06:25:06 paulej Exp $
10 *****************************************************************************
11 *
12 * Description:
13 * This class implements the Secure Hashing Standard as defined
14 * in FIPS PUB 180-1 published April 17, 1995.
15 *
16 * Many of the variable names in this class, especially the single
17 * character names, were used because those were the names used
18 * in the publication.
19 *
20 * Please read the file sha1.cpp for more information.
21 *
22 */
23 
24 #ifndef _SHA1_H_
25 #define _SHA1_H_
26 
27 class SHA1
28 {
29 
30 public:
31 
32  SHA1();
33  virtual ~SHA1();
34 
35  /*
36  * Re-initialize the class
37  */
38  void Reset();
39 
40  /*
41  * Returns the message digest
42  */
43  bool Result(unsigned *message_digest_array);
44 
45  /*
46  * Provide input to SHA1
47  */
48  void Input( const unsigned char *message_array,
49  unsigned length);
50  void Input( const char *message_array,
51  unsigned length);
52  void Input(unsigned char message_element);
53  void Input(char message_element);
54  SHA1& operator<<(const char *message_array);
55  SHA1& operator<<(const unsigned char *message_array);
56  SHA1& operator<<(const char message_element);
57  SHA1& operator<<(const unsigned char message_element);
58 
59 private:
60 
61  /*
62  * Process the next 512 bits of the message
63  */
64  void ProcessMessageBlock();
65 
66  /*
67  * Pads the current message block to 512 bits
68  */
69  void PadMessage();
70 
71  /*
72  * Performs a circular left shift operation
73  */
74  inline unsigned CircularShift(int bits, unsigned word);
75 
76  unsigned H[5]; // Message digest buffers
77 
78  unsigned Length_Low; // Message length in bits
79  unsigned Length_High; // Message length in bits
80 
81  unsigned char Message_Block[64]; // 512-bit message blocks
82  int Message_Block_Index; // Index into message block array
83 
84  bool Computed; // Is the digest computed?
85  bool Corrupted; // Is the message digest corruped?
86 
87 };
88 
89 #endif