177
|
1 /*
|
|
2 * sha1.h
|
|
3 *
|
|
4 * Copyright (C) 1998, 2009
|
|
5 * Paul E. Jones <paulej@packetizer.com>
|
|
6 * All Rights Reserved.
|
|
7 *
|
|
8 *****************************************************************************
|
|
9 * $Id: sha1.h 12 2009-06-22 19:34:25Z paulej $
|
|
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
|