![]() |
Shadowrun: Awakened 29 September 2011 - Build 871
|
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 #ifndef ___SHA1_H___ 00019 #define ___SHA1_H___ 00020 00021 #include "RakMemoryOverride.h" 00022 #include <stdio.h> // Needed for file access 00023 00024 #include <memory.h> // Needed for memset and memcpy 00025 00026 #include <string.h> // Needed for strcat and strcpy 00027 #include "Export.h" 00028 00029 #define MAX_FILE_READ_BUFFER 8000 00030 00031 #define SHA1_LENGTH 20 00032 00033 class RAK_DLL_EXPORT CSHA1 00034 { 00035 00036 public: 00037 // Rotate x bits to the left 00038 #define ROL32(value, bits) (((value)<<(bits))|((value)>>(32-(bits)))) 00039 00040 #ifdef LITTLE_ENDIAN 00041 #define SHABLK0(i) (block->l[i] = (ROL32(block->l[i],24) & 0xFF00FF00) \ 00042 | (ROL32(block->l[i],8) & 0x00FF00FF)) 00043 #else 00044 #define SHABLK0(i) (block->l[i]) 00045 #endif 00046 00047 #define SHABLK(i) (block->l[i&15] = ROL32(block->l[(i+13)&15] ^ block->l[(i+8)&15] \ 00048 ^ block->l[(i+2)&15] ^ block->l[i&15],1)) 00049 00050 // SHA-1 rounds 00051 #define R0(v,w,x,y,z,i) { z+=((w&(x^y))^y)+SHABLK0(i)+0x5A827999+ROL32(v,5); w=ROL32(w,30); } 00052 #define R1(v,w,x,y,z,i) { z+=((w&(x^y))^y)+SHABLK(i)+0x5A827999+ROL32(v,5); w=ROL32(w,30); } 00053 #define R2(v,w,x,y,z,i) { z+=(w^x^y)+SHABLK(i)+0x6ED9EBA1+ROL32(v,5); w=ROL32(w,30); } 00054 #define R3(v,w,x,y,z,i) { z+=(((w|x)&y)|(w&x))+SHABLK(i)+0x8F1BBCDC+ROL32(v,5); w=ROL32(w,30); } 00055 #define R4(v,w,x,y,z,i) { z+=(w^x^y)+SHABLK(i)+0xCA62C1D6+ROL32(v,5); w=ROL32(w,30); } 00056 00057 typedef union { 00058 unsigned char c[ 64 ]; 00059 unsigned int l[ 16 ]; 00060 } SHA1_WORKSPACE_BLOCK; 00061 /* Two different formats for ReportHash(...) 00062 */ 00063 enum { REPORT_HEX = 0, 00064 REPORT_DIGIT = 1}; 00065 00066 CSHA1(); 00067 virtual ~CSHA1(); 00068 00069 unsigned int m_state[ 5 ]; 00070 unsigned int m_count[ 2 ]; 00071 unsigned char m_buffer[ 64 ]; 00072 unsigned char m_digest[ 20 ]; 00073 void Reset(); 00074 void Update( unsigned char* data, unsigned int len ); 00075 bool HashFile( char *szFileName ); 00076 void Final(); 00077 void ReportHash( char *szReport, unsigned char uReportType = REPORT_HEX ); 00078 void GetHash( unsigned char *uDest ); 00079 unsigned char * GetHash( void ) const; 00080 00081 private: 00082 void Transform( unsigned int state[ 5 ], unsigned char buffer[ 64 ] ); 00083 unsigned char workspace[ 64 ]; 00084 }; 00085 00086 #endif // ___SHA1_H___ 00087
Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.