diff options
author | Remko Tronçon <git@el-tramo.be> | 2011-04-04 20:51:49 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2011-04-18 19:11:40 (GMT) |
commit | 1a92834490cda1352a46eaef02a4e7ff76ab94e3 (patch) | |
tree | 393a65efb8eb4aa7f284a9b46f2604bf1d295e5a /Swiften/StringCodecs/SHA1.h | |
parent | 36c2dbefc06607483eb0d309e3a9a4ad1f4f8f73 (diff) | |
download | swift-contrib-1a92834490cda1352a46eaef02a4e7ff76ab94e3.zip swift-contrib-1a92834490cda1352a46eaef02a4e7ff76ab94e3.tar.bz2 |
Make SHA1 stateful.
Resolves: #814
Diffstat (limited to 'Swiften/StringCodecs/SHA1.h')
-rw-r--r-- | Swiften/StringCodecs/SHA1.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Swiften/StringCodecs/SHA1.h b/Swiften/StringCodecs/SHA1.h index fc5ba0e..9c0232a 100644 --- a/Swiften/StringCodecs/SHA1.h +++ b/Swiften/StringCodecs/SHA1.h @@ -6,11 +6,38 @@ #pragma once +#include <vector> +#include <boost/cstdint.hpp> + #include "Swiften/Base/ByteArray.h" namespace Swift { class SHA1 { public: + SHA1(); + + SHA1& update(const std::vector<unsigned char>& data); + std::vector<unsigned char> getHash() const; + + /** + * Equivalent of: + * SHA1().update(data),getHash(), but slightly more efficient and + * convenient. + */ static ByteArray getHash(const ByteArray& data); + + private: + typedef struct { + boost::uint32_t state[5]; + boost::uint32_t count[2]; + boost::uint8_t buffer[64]; + } CTX; + static void Init(CTX* context); + static void Transform(boost::uint32_t state[5], boost::uint8_t buffer[64]); + static void Update(CTX* context, boost::uint8_t* data, unsigned int len); + static void Final(boost::uint8_t digest[20], CTX* context); + + private: + CTX context; }; } |