A fine-tuned implementation of the SHA256 hashing algorithm.

Dependents:   EntropySource Wallet_v1

Committer:
Remco
Date:
Mon Jun 20 00:25:41 2011 +0000
Revision:
1:147d17bb1d36
Parent:
0:772b6de3a841
Child:
2:1991439ea6b8

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Remco 0:772b6de3a841 1 // Author: Remco Bloemen
Remco 0:772b6de3a841 2 // Based on:
Remco 0:772b6de3a841 3 // http://en.wikipedia.org/wiki/SHA-2
Remco 0:772b6de3a841 4 // http://www.iwar.org.uk/comsec/resources/cipher/sha256-384-512.pdf
Remco 0:772b6de3a841 5
Remco 0:772b6de3a841 6 #include <string.h>
Remco 0:772b6de3a841 7 #include <string>
Remco 0:772b6de3a841 8
Remco 0:772b6de3a841 9 class SHA256 {
Remco 0:772b6de3a841 10 public:
Remco 0:772b6de3a841 11 SHA256() { reset(); }
Remco 0:772b6de3a841 12 void reset();
Remco 0:772b6de3a841 13 void append(const char* data, int size);
Remco 0:772b6de3a841 14 void append(const char* str) { append(str, strlen(str)); }
Remco 0:772b6de3a841 15 void append(const std::string& str) { append(str.data(), str.length()); }
Remco 0:772b6de3a841 16 void finalize();
Remco 0:772b6de3a841 17 const char* digest() { return reinterpret_cast<char*>(hash); }
Remco 1:147d17bb1d36 18 std::string rawdigest() { return std::string(digest(), 32); }
Remco 0:772b6de3a841 19 private:
Remco 0:772b6de3a841 20 void process_chunk();
Remco 0:772b6de3a841 21 int length;
Remco 0:772b6de3a841 22 unsigned int hash[8];
Remco 0:772b6de3a841 23 unsigned int w[64];
Remco 0:772b6de3a841 24 };
Remco 0:772b6de3a841 25