Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/plugin/PluginSha1.h

Issue 11013110: Cleanup (Closed)
Patch Set: Minor CallEngine refactoring Created July 26, 2013, 2:12 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 100% free public domain implementation of the SHA-1 algorithm
3 by Dominik Reichl <dominik.reichl@t-online.de>
4 Web: http://www.dominik-reichl.de/
5
6 Version 1.8 - 2008-03-16
7 - Converted project files to Visual Studio 2008 format.
8 - Added Unicode support for HashFile utility method.
9 - Added support for hashing files using the HashFile method that are
10 larger than 2 GB.
11 - HashFile now returns an error code instead of copying an error
12 message into the output buffer.
13 - GetHash now returns an error code and validates the input parameter.
14 - Added ReportHashStl STL utility method.
15 - Added REPORT_HEX_SHORT reporting mode.
16 - Improved Linux compatibility of test program.
17
18 Version 1.7 - 2006-12-21
19 - Fixed buffer underrun warning that appeared when compiling with
20 Borland C Builder (thanks to Rex Bloom and Tim Gallagher for the
21 patch).
22 - Breaking change: ReportHash writes the final hash to the start
23 of the buffer, i.e. it's not appending it to the string anymore.
24 - Made some function parameters const.
25 - Added Visual Studio 2005 project files to demo project.
26
27 Version 1.6 - 2005-02-07 (thanks to Howard Kapustein for patches)
28 - You can set the endianness in your files, no need to modify the
29 header file of the CSHA1 class anymore.
30 - Aligned data support.
31 - Made support/compilation of the utility functions (ReportHash and
32 HashFile) optional (useful when bytes count, for example in embedded
33 environments).
34
35 Version 1.5 - 2005-01-01
36 - 64-bit compiler compatibility added.
37 - Made variable wiping optional (define SHA1_WIPE_VARIABLES).
38 - Removed unnecessary variable initializations.
39 - ROL32 improvement for the Microsoft compiler (using _rotl).
40
41 Version 1.4 - 2004-07-22
42 - CSHA1 now compiles fine with GCC 3.3 under MacOS X (thanks to Larry
43 Hastings).
44
45 Version 1.3 - 2003-08-17
46 - Fixed a small memory bug and made a buffer array a class member to
47 ensure correct working when using multiple CSHA1 class instances at
48 one time.
49
50 Version 1.2 - 2002-11-16
51 - Borlands C++ compiler seems to have problems with string addition
52 using sprintf. Fixed the bug which caused the digest report function
53 not to work properly. CSHA1 is now Borland compatible.
54
55 Version 1.1 - 2002-10-11
56 - Removed two unnecessary header file includes and changed BOOL to
57 bool. Fixed some minor bugs in the web page contents.
58
59 Version 1.0 - 2002-06-20
60 - First official release.
61
62 ======== Test Vectors (from FIPS PUB 180-1) ========
63
64 SHA1("abc") =
65 A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
66
67 SHA1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") =
68 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
69
70 SHA1(A million repetitions of "a") =
71 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
72 */
73
74 #ifndef ___SHA1_HDR___
75 #define ___SHA1_HDR___
76
77 #if !defined(SHA1_UTILITY_FUNCTIONS) && !defined(SHA1_NO_UTILITY_FUNCTIONS)
78 #define SHA1_UTILITY_FUNCTIONS
79 #endif
80
81 #if !defined(SHA1_STL_FUNCTIONS) && !defined(SHA1_NO_STL_FUNCTIONS)
82 #define SHA1_STL_FUNCTIONS
83 #if !defined(SHA1_UTILITY_FUNCTIONS)
84 #error STL functions require SHA1_UTILITY_FUNCTIONS.
85 #endif
86 #endif
87
88 #include <memory.h>
89
90 #ifdef SHA1_UTILITY_FUNCTIONS
91 #include <stdio.h>
92 #include <string.h>
93 #endif
94
95 #ifdef SHA1_STL_FUNCTIONS
96 #include <string>
97 #endif
98
99 #ifdef _MSC_VER
100 #include <stdlib.h>
101 #endif
102
103 // You can define the endian mode in your files without modifying the SHA-1
104 // source files. Just #define SHA1_LITTLE_ENDIAN or #define SHA1_BIG_ENDIAN
105 // in your files, before including the SHA1.h header file. If you don't
106 // define anything, the class defaults to little endian.
107 #if !defined(SHA1_LITTLE_ENDIAN) && !defined(SHA1_BIG_ENDIAN)
108 #define SHA1_LITTLE_ENDIAN
109 #endif
110
111 // If you want variable wiping, #define SHA1_WIPE_VARIABLES, if not,
112 // #define SHA1_NO_WIPE_VARIABLES. If you don't define anything, it
113 // defaults to wiping.
114 #if !defined(SHA1_WIPE_VARIABLES) && !defined(SHA1_NO_WIPE_VARIABLES)
115 #define SHA1_WIPE_VARIABLES
116 #endif
117
118 #if defined(SHA1_HAS_TCHAR)
119 #include <tchar.h>
120 #else
121 #ifdef _MSC_VER
122 #include <tchar.h>
123 #else
124 #ifndef TCHAR
125 #define TCHAR char
126 #endif
127 #ifndef _T
128 #define _T(__x) (__x)
129 #define _tmain main
130 #define _tprintf printf
131 #define _getts gets
132 #define _tcslen strlen
133 #define _tfopen fopen
134 #define _tcscpy strcpy
135 #define _tcscat strcat
136 #define _sntprintf snprintf
137 #endif
138 #endif
139 #endif
140
141 // Fallback, if no 64-bit support
142 #ifndef _fseeki64
143 #define _fseeki64 fseek
144 #endif
145 #ifndef _ftelli64
146 #define _ftelli64 ftell
147 #endif
148
149 ///////////////////////////////////////////////////////////////////////////
150 // Define variable types
151
152 #ifndef UINT_8
153 #ifdef _MSC_VER // Compiling with Microsoft compiler
154 #define UINT_8 unsigned __int8
155 #else // !_MSC_VER
156 #define UINT_8 unsigned char
157 #endif // _MSC_VER
158 #endif
159
160 #ifndef UINT_32
161 #ifdef _MSC_VER // Compiling with Microsoft compiler
162 #define UINT_32 unsigned __int32
163 #else // !_MSC_VER
164 #if (ULONG_MAX == 0xFFFFFFFF)
165 #define UINT_32 unsigned long
166 #else
167 #define UINT_32 unsigned int
168 #endif
169 #endif // _MSC_VER
170 #endif // UINT_32
171
172 #ifndef INT_64
173 #ifdef _MSC_VER // Compiling with Microsoft compiler
174 #define INT_64 __int64
175 #else // !_MSC_VER
176 #define INT_64 long long
177 #endif // _MSC_VER
178 #endif // INT_64
179
180 #ifndef UINT_64
181 #ifdef _MSC_VER // Compiling with Microsoft compiler
182 #define UINT_64 unsigned __int64
183 #else // !_MSC_VER
184 #define UINT_64 unsigned long long
185 #endif // _MSC_VER
186 #endif // UINT_64
187
188 ///////////////////////////////////////////////////////////////////////////
189 // Declare SHA-1 workspace
190
191 typedef union
192 {
193 UINT_8 c[64];
194 UINT_32 l[16];
195 } SHA1_WORKSPACE_BLOCK;
196
197 class CSHA1
198 {
199 public:
200 #ifdef SHA1_UTILITY_FUNCTIONS
201 // Different formats for ReportHash
202 enum REPORT_TYPE
203 {
204 REPORT_HEX = 0,
205 REPORT_DIGIT = 1,
206 REPORT_HEX_SHORT = 2
207 };
208 #endif
209
210 // Constructor and destructor
211 CSHA1();
212 ~CSHA1();
213
214 UINT_32 m_state[5];
215 UINT_32 m_count[2];
216 UINT_32 m_reserved0[1]; // Memory alignment padding
217 UINT_8 m_buffer[64];
218 UINT_8 m_digest[20];
219 UINT_32 m_reserved1[3]; // Memory alignment padding
220
221 void Reset();
222
223 // Update the hash value
224 void Update(const UINT_8* pbData, UINT_32 uLen);
225
226 #ifdef SHA1_UTILITY_FUNCTIONS
227 // Hash in file contents
228 bool HashFile(const TCHAR* tszFileName);
229 #endif
230
231 // Finalize hash, call before using ReportHash(Stl)
232 void Final();
233
234 #ifdef SHA1_UTILITY_FUNCTIONS
235 bool ReportHash(TCHAR* tszReport, REPORT_TYPE rtReportType = REPORT_HEX) const ;
236 #endif
237
238 #ifdef SHA1_STL_FUNCTIONS
239 bool ReportHashStl(std::basic_string<TCHAR>& strOut, REPORT_TYPE rtReportType =
240 REPORT_HEX) const;
241 #endif
242
243 bool GetHash(UINT_8* pbDest) const;
244
245 private:
246 // Private SHA-1 transformation
247 void Transform(UINT_32* pState, const UINT_8* pBuffer);
248
249 // Member variables
250 UINT_8 m_workspace[64];
251 SHA1_WORKSPACE_BLOCK* m_block; // SHA1 pointer to the byte array above
252 };
253
254 #endif // ___SHA1_HDR___
OLDNEW

Powered by Google App Engine
This is Rietveld