A fine-tuned implementation of the SHA256 hashing algorithm.
Dependents: EntropySource Wallet_v1
SHA256.h@0:772b6de3a841, 2011-06-20 (annotated)
- Committer:
- Remco
- Date:
- Mon Jun 20 00:23:22 2011 +0000
- Revision:
- 0:772b6de3a841
- Child:
- 1:147d17bb1d36
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:772b6de3a841 | 18 | std::string rawdigest() { return std::string(digest(), 8); } |
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 |