-
Notifications
You must be signed in to change notification settings - Fork 0
/
SHA256.h
62 lines (54 loc) · 2.49 KB
/
SHA256.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef SHA256_H
#define SHA256_H
#include <iostream>
#include <string>
#include <vector>
#include <stdint.h>
using namespace std;
typedef uint8_t byte;
typedef uint32_t word;
typedef uint64_t longword;
class SHA256
{
protected:
// Protected class variables
static const unsigned short EXTENDED_WORD_AMOUNT = 64,
DIGEST_CHARS = 64,
SIZE_WITHOUT_LENGTH = 448,
WORD_BYTES = 4,
LONGWORD_BYTES = 8,
CHUNK_BYTES = 64,
BYTE_HEX_DIGITS = 2, // 2 hex digits are needed to display a byte.
HEX_DIGIT_BITS = 4, // A single hex digit corresponds to 4 bits.
BYTE_SIZE = 8, // 8 Bits.
WORD_SIZE = WORD_BYTES * BYTE_SIZE, // 32 bits.
LONGWORD_SIZE = LONGWORD_BYTES * BYTE_SIZE, // 64 bits.
CHUNK_SIZE = CHUNK_BYTES * BYTE_SIZE; // 512 bits.
static const byte FULL_BYTE = 0xFF, // A byte with all bits set to 1.
HALF_BYTE = 0x0F; // A byte with the 4 left bits set to 0 and the 4 right bits set to 1.
static const string HEX_VALUES, SHA_VERSION;
static const string ERRORS[]; // Contains at each index an error message corresponding to that error number.
static const word ROUND_CONSTANTS[EXTENDED_WORD_AMOUNT],
INITIAL_VALUES[];
static const short OUT_OF_BOUNDS_E = 1,
INVALID_HASH_LENGTH_E = 2,
INVALID_CHUNK_SIZE_E = 3;
word h0, h1, h2, h3, h4, h5, h6, h7;
// Protected class methods
void setDefaults();
vector<byte> preProcess(vector<byte> input);
void processChunk(vector<byte> chunkContainer);
word bytesToWord(vector<byte> input, unsigned int start);
string wVectorToHexString(vector<word> input);
word rightRotate(word w, unsigned int n);
void handleException(short errorId);
vector<word> hash(vector<byte> input);
public:
// Public class methods
SHA256();
~SHA256();
string hash(string input);
string hash(char* input, longword size);
string shaVersion();
};
#endif