diff options
Diffstat (limited to 'Swiften/StringCodecs/SHA256.h')
| -rw-r--r-- | Swiften/StringCodecs/SHA256.h | 56 | 
1 files changed, 56 insertions, 0 deletions
| diff --git a/Swiften/StringCodecs/SHA256.h b/Swiften/StringCodecs/SHA256.h new file mode 100644 index 0000000..28a0e05 --- /dev/null +++ b/Swiften/StringCodecs/SHA256.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include <vector> +#include <boost/cstdint.hpp> + +#include <Swiften/Base/ByteArray.h> +#include <Swiften/Base/SafeByteArray.h> + +namespace Swift { +	class SHA256 { +		public: +			SHA256(); + +			SHA256& update(const std::vector<unsigned char>& data); +			std::vector<unsigned char> getHash() const; + +			/** +			 * Equivalent of: +			 *	SHA256().update(data),getHash(), but slightly more efficient and +			 *	convenient. +			 */ +			static ByteArray getHash(const ByteArray& data); +			static ByteArray getHash(const SafeByteArray& data); + +			ByteArray operator()(const SafeByteArray& data) { +				return getHash(data); +			} + +			ByteArray operator()(const ByteArray& data) { +				return getHash(data); +			} + +		private: +			struct State { +					boost::uint64_t length; +					boost::uint32_t state[8], curlen; +					unsigned char buf[64]; +			}; + +			static int init(State *md); +			static int process(State * md, const unsigned char *in, unsigned int inlen); +			static int compress(State *md, unsigned char *buf); +			static int done(State * md, unsigned char *out); + +			template<typename Container> static	ByteArray getHashInternal(const Container& input); + +		private: +			State state; +	}; +} | 
 Swift
 Swift